64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
#define maxsize 50
struct node
{
int adjvex;
node * next;
};
struct graph
{
int vexter;
int in;
node *firstedge;
};
typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;
void initstack(sqstack &S)
{
S.base=(int *)malloc(sizeof(int));
S.top=S.base;
S.stacksize=maxsize+1;
}
void createadlist(graph inDegree[],int n,int e)//创建邻接链表
{
int i,k,j;
node * q;
for(i=1;i<=n;i++)
{
inDegree[i].vexter=i; //结点的序号
inDegree[i].in=0;
inDegree[i].firstedge=NULL;
}
for(k=1;k<=e;k++)
{
cout<<"依次输入每一条边:\n";
cout<<"从";
cin>>i;
cout<<"邻接到";
cin>>j;
cout<<'\n';
inDegree[j].in++;
q=(node *)malloc(sizeof(struct node));
q->adjvex=j;
q->next=inDegree[i].firstedge;
inDegree[i].firstedge=q;
}
}
void TopoSort(graph inDegree[],int n)
{
int i,v,count=0;
sqstack S;
node * p;
initstack(S);
for(i=1;i<=n;i++)
if(inDegree[i].in==0)
*S.top++=i;
while(S.top!=S.base)
{
v=*--S.top;
cout<<v<<"\t";
count++;
p=inDegree[v].firstedge;
while(p!=NULL)
{
inDegree[p->adjvex].in--;
if(inDegree[p->adjvex].in==0)
*S.top++=p->adjvex;
p=p->next;
}
}
cout<<endl;
if(count<n) cout<<"有回路"<<endl;
else cout<<"无回路"<<endl;
}
void TestTopoSort()
{
graph inDegree[maxsize];
int v,e;
cout<<"该AOV网的顶点数:";
cin>>v;
cout<<"该AOV网的边条数:";
cin>>e;
createadlist(inDegree,v,e);
cout<<"拓扑排序序列为:"<<endl;
TopoSort(inDegree,v);
}