您的位置:首页 > 其它

拓扑排序简单思路O(n^2)附HDU 5154 Harry and Magical Computer

2015-11-15 16:03 429 查看
拓扑排序简单思路

首先读入整个图,扫描所有的点,找到一个入度为0的点,这就是一个可以放在拓扑序列首部的点,然后这个点的所有的直接的后继的入度-1.

反复操作直到所有的点都进入了拓扑序列。

附HDU 5154AC 代码

#include <bits/stdc++.h>
using namespace std;
int a[105][105];
int num[105];
int main()
{
int n,m;
int l,r;
int ans;
while (~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
memset(num,0,sizeof(num));
for (int i=1;i<=m;i++)
{
scanf("%d%d",&l,&r);
if (!a[l][r])
{
a[l][r]=1;
num[r]++;
}
}
ans=0;
for (int cas=1;cas<=n;cas++)
{
for (int i=1;i<=n;i++)
{
if (num[i]==0)
{
num[i]=-1;
for (int j=1;j<=n;j++)
{
if (a[i][j]) num[j]--;
}
ans++;
break;
}
}
}
if (ans==n) printf("YES\n");
else printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: