运用拓扑排序的算法 这也是老师提供的模板 把每个关系构成图 离散没有学好...
但是有模板啊,不过数学真的要好好学,嗯!
代码:
#include <iostream>
#include<cstring>
using namespace std;
#define MAXN 520
int toposort(int n,int mat[][MAXN],int* ret)
{
int d[MAXN],i,j,k;
for (i=0; i<n; i++)
for (d[i]=j=0; j<n; d[i]+=mat[j++][i]);
for (k=0; k<n; ret[k++]=i)
{
for (i=0; d[i]&&i<n; i++);
if (i==n)
return 0;
for (d[i]=-1,j=0; j<n; j++)
d[j]-=mat[i][j];
}
return 1;
}
int main()
{
int m,n,a,b,data[520],map[520][520];
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
for(int i=0;i<m;i++)
{
cin>>a>>b;
map[a-1][b-1]=1;
}
toposort(n,map,data);
for(int i=0;i<n-1;i++)
cout<<data[i]+1<<' ';
cout<<data[n-1]+1<<endl;
}
return 0;
}