hdu1285拓扑排序
同样的又是复习,一道拓扑排序水题
代码:
#include<iostream>
#include<cstring>
using namespace std;
#define N 550
int map[N][N];
int indegree[N];
int ans[N];
void toposort(int n)
{
int i,j,k;
k=0;
while(k<n)
{
for(i=1;i<=n;i++)
{
if(indegree[i]==0)
{
indegree[i]--;
ans[k++]=i;
for(j=1;j<=n;j++)
{
if(map[i][j]) indegree[j]--;
}
break; // 这个很关键,找到一个就退出
}
}
}
return ;
}
int main()
{
int n,m;
int a,b;
int i,tmp;
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
memset(indegree,0,sizeof(indegree));
for(i=0;i<m;i++)
{
cin>>a>>b;
if(map[a][b]==0)
{
map[a][b]=1;
indegree[b]++; //入度
}
}
toposort(n);
tmp=n-1;
for(i=0;i<tmp;i++)
cout<<ans[i]<<' ';
cout<<ans[i]<<endl;
}
}

浙公网安备 33010602011771号