拓扑排序(AOV)---判断图中是否有环---《数据结构》严蔚敏
发布时间:2020-12-15 06:07:25 所属栏目:安全 来源:网络整理
导读:// exam1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include iostream#include stackusing namespace std;#define MAXVEX 20typedef struct ArcNode{int adjvex;void* Info;struct ArcNode* nextarc;}ArcNode;typedef struct HeadNode{int d
// exam1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <stack> using namespace std; #define MAXVEX 20 typedef struct ArcNode { int adjvex; void* Info; struct ArcNode* nextarc; }ArcNode; typedef struct HeadNode { int data; ArcNode* firstarc; }HeadNode; typedef struct ALGraph { int arcnum; int vexnum; HeadNode vex[MAXVEX]; }ALGraph; void InitALGraph(ALGraph& G) { cout<<"please enter the number of the vertex:"<<endl; cin>>G.vexnum; G.arcnum=0; for(int i=1;i<G.vexnum+1;i++) { G.vex[i].data=i; G.vex[i].firstarc=NULL; } cout<<"please enter the Arc..."<<endl; cout<<"headnode tailnode"<<endl; int adj1,adj2; while(cin>>adj1>>adj2) { G.arcnum++; ArcNode* arc; arc=G.vex[adj1].firstarc; if(arc==NULL) { G.vex[adj1].firstarc=(ArcNode*)malloc(sizeof(ArcNode)); arc=G.vex[adj1].firstarc; arc->adjvex=adj2; arc->nextarc=NULL; } else { while(arc->nextarc) { arc=arc->nextarc; } arc->nextarc=(ArcNode*)malloc(sizeof(ArcNode)); arc->nextarc->adjvex=adj2; arc->nextarc->nextarc=NULL; } } for(int i=1;i<G.vexnum+1;i++) { cout<<"vextex"<<i<<"'s adjacent vertices are:"; ArcNode* arc; arc=G.vex[i].firstarc; while(arc!=NULL) { cout<<arc->adjvex<<" "; arc=arc->nextarc; } cout<<endl; } } void CalIndegree(ALGraph G,int* indegree) { for(int i=1;i<G.vexnum+1;i++) { ArcNode* arc; arc=G.vex[i].firstarc; while(arc!=NULL) { indegree[arc->adjvex]++; arc=arc->nextarc; } } } void TopologicalSort(ALGraph G) { int *indegree=(int*)malloc(sizeof(int)*(G.vexnum+1)); memset(indegree,sizeof(int)*(G.vexnum+1)); CalIndegree(G,indegree); stack<int> s; for(int i=1;i<G.vexnum+1;i++) { if(indegree[i]==0) { s.push(i); } } cout<<"The topological sort of the graph is"<<endl; int count=0; while(!s.empty()) { int i=s.top(); s.pop(); cout<<i<<" "; count++; ArcNode* arc; arc=G.vex[i].firstarc;; while(arc!=NULL) { if(--indegree[arc->adjvex]==0) { s.push(arc->adjvex); } arc=arc->nextarc; } } cout<<endl; if(count==G.vexnum) { cout<<"No loop in the graph..."<<endl; } return; } int main(void) { ALGraph G; InitALGraph(G); TopologicalSort(G); system("pause"); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |