数据结构 图基本运算代码.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
#includeiostream #includeLGraph.h #includeseqqueue.h #includeMGraph.h #define INFTY 1000 templateclass T struct ENode { ENode() {nextArc=NULL;} ENode(int vertex,T weight,ENode *next) { adjVex=vertex; w=weight; nextArc=next; } int adjVex; T w; ENode* nextArc; }; templateclass T class ExtLGraph:public LGraphT { public: ExtLGraph(int mSize):LGraphT(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); }; templateclass T void ExtLGraphT::DFS() { bool *visited=new bool[n]; for(int i=0;in;i++) visited[i]=false; for(i=0;in;i++) if(!visited[i]) DFS(i,visited); delete []visited; } templateclass T void ExtLGraphT::DFS(int v,bool *visited) { visited[v]=true; cout v; for(ENodeT *t=a[v];t;t=t-nextArc) if(!visited[t-adjVex]) DFS(t-adjVex,visited); } templateclass T void ExtLGraphT::BFS() { bool *visited=new bool[n]; for(int i=0;in;i++) visited[i]=false; for(i=0;in;i++) if(!visited[i]) BFS(i,visited); delete []visited; } templateclass T void ExtLGraphT::BFS(int v,bool *visited) { SeqQueueintq(Vertices()); visited[v]=true; cout v; q.EnQueue(v); while(!q.IsEmpty()) { q.Front(v); q.DeQueue(); for(ENodeT *t=a[v];t;t=t-nextArc) if(!visited[t-adjVex]){ visited[t-adjVex]=true; cout w-adjVex; } q.EnQueue(t-adjVex); } } templateclass T void ExtLGraphT::CalInDegree(int *InDegree) //计算所有顶点的入度 { for(int i=0;in;i++) InDegree[i]=0; for(i=0;in;i++) for(ENodeT* p=a[i];p;p=p-nextArc) InDegree[p-adjVex]++; } templateclass T void ExtLGraphT::TopoSort(int *order) { int *InDegree=new int[n]; int i,j,k,top=-1; CalInDegree(InDegree); for(i=0;in;i++) if(!InDegree[i]) { InDegree[i]=top; top=i; } for(i=0;in;i++) { if(top==-1) { coutHas cycle!endl; return; } else { j=top; top=InDegree[top]; order[i]=j; coutj ; for(ENodeT* p=a[j];p;p=p-nextArc){ k=p-adjVex; InD

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档