好久没切题 先上水题!
拓扑排序!
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int g[105][105];
int d[105];
int N,M;
bool Topsort()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(g[i][j]==1)
{
d[j]++;
}
}
}
for(int i=0;i<N;i++)
{
int j;
for(j=0;j<N;j++)
{
if(d[j]==0)
{
break;
}
}
if(j==N)
{
return false;
}
else
{
d[j]=-1;
for(int k=0;k<N;k++)
{
if(g[j][k]==1)
d[k]--;
}
}
}
return true;
}
int main()
{
while(scanf("%d%d",&N,&M)&&N)
{
memset(g,0,sizeof(g));
memset(d,0,sizeof(d));
for(int i=0;i<M;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x][y]=1;
}
if(Topsort())
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}

本文深入探讨了拓扑排序的概念、原理及应用实例,通过代码实现帮助读者理解并掌握拓扑排序这一重要算法。
1499

被折叠的 条评论
为什么被折叠?



