?? 拓撲排序.cpp
字號:
//拓撲排序
#include <iostream.h>
#include <stdlib.h>
const int MaxEdgeNum=100;
const int MaxVertexNum=100;
typedef int VertexType;
typedef int ElemType;
typedef VertexType vexlist[MaxVertexNum];//定義存儲頂點信息的數組類型
struct edgenode{//定義鄰接表中的邊結點類型
int adjvex;//鄰接點域
edgenode *next;
};
typedef edgenode *adjlist[MaxVertexNum];//定義存儲N個表頭指針的數組類型
bool visited[MaxVertexNum];
void Create(vexlist GV,adjlist GL,int v,int e)
{
int i,j,k;
cout<<"輸入"<<v<<"個頂點:"<<endl;
for(i=0;i<v;i++)
cin>>GV[i];
for(i=0;i<v;i++)
GL[i]=NULL;
cout<<"輸入"<<e<<"條邊:"<<endl;
for(k=1;k<=e;i++)
{
cin>>i>>j;
edgenode *p=new edgenode;//申請新結點
p->adjvex=j;//將新結點插入到鄰接表的表頭
p->next=GL[i];
GL[i]=p;
}
}
void Toposort(adjlist GL,int n)
{
int i,j,k,top,m=0;
edgenode *p;
int *d=new int[n];
for(i=0;i<n;i++)
d[i]=0;
for(i=0;i<n;i++)
{
p=GL[i];
while(p!=NULL)
{
j=p->adjvex;
d[j]++;
p=p->next;
}
}
top=-1;
for(i=0;i<n;i++)
if(d[i]==0)
{
d[i]=top;
top=i;
}
while(top!=1)
{
j=top;
top=d[top];
cout<<j<<' ';
m++;
p=GL[j];
while(p!=NULL)
{
k=p->adjvex;
d[k]--;
if(d[k]==0)
{
d[k]=top;
top=k;
}
p=p->next;
}
}
cout<<endl;
if(m<n)
cout<<"The network has a cycle!"<<endl;
}
void main()
{
adjlist GL;
vexlist GV;
int v,e;
cout<<"請輸入頂點數:";
cin>>v;
cout<<"請輸入邊數:";
cin>>e;
Create(GV,GL,v,e);
Toposort(GL,v);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -