/*实现拓扑序列*/
#include<iostream>
#include<queue>
using namespace std;
#define MAX 100
typedef struct node //节点的结构体
{
int data ;
struct node *next ;
}node;
node *e[MAX] ;
int edge[MAX] ;
/*利用加边法建立邻接表*/
void addedge(int v , int w)
{
node *ptr ;
ptr = new node;
ptr->data = w ;
ptr ->next = e[v];
e[v] = ptr ;
return ;
}
/*建立拓扑序列*/
void TopLogicalSort()
{
queue<int>q ;
for( int i = 0 ; i < 10 ; i++)
if(edge[i] == 0 )
q.push(i) ;
while(!q.empty())
{
int j = q.front() ;
cout<<j;
q.pop() ;
for( node *w = e[j] ; w ; w = w->next)
if((--edge[w->data]) == 0 )
q.push(w->data);
}
}
int main(void)
{
int i ;
memset(edge , 0 , sizeof(edge));
/*利用加边法建立邻接表,并遍历邻接表*/
cout<<"输入节点(0-10)之内"<<endl;
for( i = 0 ; i < 10 ; i ++)
{
int a , b ;
cin >> a >> b ;
edge[b] ++ ;
addedge(a , b );
}
for( i = 0 ; i < 10 ; i++)
{
cout<<i<<"的相邻节点是: ";
for( node *w = e[i] ; w ; w = w->next)
cout<<w->data ;
cout<<endl;
}
cout<<"拓扑序列为: ";
TopLogicalSort();
cout<<endl ;
return 0 ;
}
使用邻接表求拓扑序列
最新推荐文章于 2024-10-08 19:29:28 发布