数据结构图的基本运算代码

上传人:ni****g 文档编号:507400310 上传时间:2023-08-08 格式:DOC 页数:14 大小:41.50KB
返回 下载 相关 举报
数据结构图的基本运算代码_第1页
第1页 / 共14页
数据结构图的基本运算代码_第2页
第2页 / 共14页
数据结构图的基本运算代码_第3页
第3页 / 共14页
数据结构图的基本运算代码_第4页
第4页 / 共14页
数据结构图的基本运算代码_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《数据结构图的基本运算代码》由会员分享,可在线阅读,更多相关《数据结构图的基本运算代码(14页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! #includeiostream#includeLGraph.h#includeseqqueue.h#includeMGraph.h#define INFTY 1000templatestruct ENodeENode()nextArc=NULL;ENode(int vertex,T weight,ENode *next)adjVex=vertex;w=weight;nextArc=next;int adjVex;T w;ENode* nextArc;templateclass ExtLGraph:public LGraphpublic:ExtL

2、Graph(int mSize):LGraph(mSize)void DFS();void BFS();void TopoSort(int *order);private:void CalInDegree(int *InDegree);void DFS(int v,bool *visited);void BFS(int v,bool *visited);templatevoid ExtLGraph:DFS()bool *visited=new booln;for(int i=0;in;i+)visitedi=false;for(i=0;in;i+)if(!visitedi) DFS(i,vis

3、ited);delete visited;templatevoid ExtLGraph:DFS(int v,bool *visited)visitedv=true;cout v;for(ENode *t=av;t;t=t-nextArc)if(!visitedt-adjVex)DFS(t-adjVex,visited);templatevoid ExtLGraph:BFS()bool *visited=new booln;for(int i=0;in;i+)visitedi=false;for(i=0;in;i+)if(!visitedi) BFS(i,visited);delete visi

4、ted;templatevoid ExtLGraph:BFS(int v,bool *visited)SeqQueueq(Vertices();visitedv=true;cout v;q.EnQueue(v);while(!q.IsEmpty()q.Front(v);q.DeQueue();for(ENode *t=av;t;t=t-nextArc)if(!visitedt-adjVex)visitedt-adjVex=true;cout adjVex;q.EnQueue(t-adjVex);templatevoid ExtLGraph:CalInDegree(int *InDegree)

5、/计算所有顶点的入度for(int i=0;in;i+)InDegreei=0;for(i=0;in;i+)for(ENode* p=ai;p;p=p-nextArc)InDegreep-adjVex+;templatevoid ExtLGraph:TopoSort(int *order)int *InDegree=new intn;int i,j,k,top=-1;CalInDegree(InDegree);for(i=0;in;i+)if(!InDegreei)InDegreei=top;top=i;for(i=0;in;i+)if(top=-1)coutHas cycle!endl;re

6、turn;elsej=top;top=InDegreetop;orderi=j;coutj ;for(ENode* p=aj;p;p=p-nextArc)k=p-adjVex;InDegreek-;if(!InDegreek)InDegreek=top;top=k;templateclass ExtMGraph:public MGraphpublic:ExtMGraph(int mSize,const T&noedg):MGraph(mSize,noedg)void DFS();void BFS();void DFS(int v);void BFS(int v);int Choose(int

7、*d,bool *s);void Dijkstra(int v,T *d,int *path);void ShowDijkstra(int v,int flag);void DijkstraForHomework(int v);/用于作业,该段代码与实验无关void Floyd(T *d,int *path);void FloydForHomework(int v);/用于作业,该段代码与实验无关private:void DFS(int v,bool *visited);void BFS(int v,bool *visited);templatevoid ExtMGraph:DFS(int v

8、)bool *visited=new booln;for(int i=0;in;i+)visitedi=false;for(i=v;in;i+)if(!visitedi) DFS(i,visited); for(i=0;iv;i+)if(!visitedi) DFS(i,visited); delete visited;templatevoid ExtMGraph:DFS()bool *visited=new booln;for(int i=0;in;i+)visitedi=false;for(i=0;in;i+)if(!visitedi) DFS(i,visited);delete visi

9、ted;templatevoid ExtMGraph:DFS(int v,bool *visited)visitedv=true;cout v;for(int t=0;tn;t+)if(avt!=noEdge&!visitedt)DFS(t,visited);templatevoid ExtMGraph:BFS(int v)bool *visited=new booln;for(int i=0;in;i+)visitedi=false;for(i=v;in;i+)if(!visitedi) BFS(i,visited); for(i=0;iv;i+)if(!visitedi) BFS(i,vi

10、sited); delete visited;templatevoid ExtMGraph:BFS()bool *visited=new booln;for(int i=0;in;i+)visitedi=false;for(i=0;in;i+)if(!visitedi) BFS(i,visited);delete visited;templatevoid ExtMGraph:BFS(int v,bool *visited)SeqQueueq(Vertices();visitedv=true;cout v;q.EnQueue(v);while(!q.IsEmpty()q.Front(v);q.D

11、eQueue();for(int j=0;jn;j+)if(avj!=noEdge&visitedj!=true) cout j;visitedj=true;q.EnQueue(j);templateint ExtMGraph:Choose(int *d,bool *s)int i,minpos;T min;min=INFTY; minpos=-1;for(i=0;in;i+)if(dimin&!si)min=di;minpos=i;return minpos;templatevoid ExtMGraph:Dijkstra(int v,T *d,int *path) int i,k,w;if(vn-1)coutout of bounds!endl;return;bool *s=new booln;for(i=0;in;i+)si=false;di=avi;if(i!=v&diINFTY)pathi=v;else pathi=-1;sv=true;dv=0;for(i=0;in;i+)k=Choose(d,s);if(k=-1) break;/若找不出下一个可连通的定点说明源点也无法到达别的定点,算法结束sk=true;fo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号