为什么LRJ的拓扑排序写的UVA上通不过呢
思路1:dfs进行拓扑排序
思路2:按照定义逐个删除入度为0的顶点
参考:http://www.ackratos.com/blog/?p=358
#include<iostream>
#include<fstream>
#include <cstring>
using namespace std;
#ifndef ONLINE_JUDGE
ifstream fin("test.in");
#else
#define fin cin
#endif
const int maxn=105;
int graph[maxn][maxn];
int notes[maxn];
int n,m;
int
degree()
{
for(int i=0;i<n;i++)
{
if(notes[i]!=-1) //该顶点没被删除
{
int degree=0;
for(int j=0;j<n;j++)
{
if(graph[j][i]==1)
{
degree=1;
break;
}
}
if(degree==0)
return i;
}
}
return -1; //没有找到入度为0的顶点了
}
int
main()
{
while(fin>>n>>m)
{
memset(graph,0,sizeof(graph));
memset(notes,0,sizeof(notes));
if(n==0&&m==0)
break;
for(int i=0;i<n;i++)
notes[i]=i+1;
for(int i=0;i<m;i++)
{
int x,y;
fin>>x>>y;
graph[x-1][y-1]=1;
}
int del;
while((del=degree())!=-1)
{
cout<<del+1<<" ";
for(int i=0;i<n;i++) //删除以del为弧尾\弧头的弧
{
graph[del][i]=0;
graph[i][del]=0;
}
notes[del]=-1; //从点集中删除该点
}
}
return 0;
}