BFS
整个图中按照各个路径的优先级先后进行,将同一优先级的路径处理完了之后再进行下一优先级的处理
具体做法
输入路径时初始化每个点的入度大小,现将入度为零的点加入优先对列,然后每一步输出队列首元素,并且把与队首元素相邻的元素入度减一,这样就做到了按照优先级的移动,直到队列里无元素,这样所有输出的元素就是一个拓扑序列。
代码一:用二维数组代替队列直接操作 较好理解
#include<iostream>
#include<algorithm>
using namespace std;
int g[maxn][maxn];
int inrt[maxn];
void solve(){
for(i=1;i<=n;i++)
for(j=1;i<=i;j++)
{
if(inrt[j]==0)
inrt=-1;
if(i==n) cout<<j<<endl;
else cout<<j<<" ";
for(k=1;k<=j;k++){
if(g[j][k]) inrt[k]--;
}
}
}
int main(){
int n,x,y;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x>>y;
g[x][y]=1;
g[y][x]=1;
inrt[y]++;
}
solve();
return 0;
}
二:
#include<cstdio>
#include<cstring>
#include<q