本文主要是介绍http://acm.nyist.net/JudgeOnline/problem.php?pid=211有向图传递闭包问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这一题是有向图的传递闭包问题,,,而这提的要求就是输出有多少牛可以确定名次的。算法思想:求出每个牛的出度和入度之和看是否等于n-1(n为牛的个数),我这里是用floyd算法写的,,,
#include<iostream>
#include<algorithm>
#include<string.h>
#include<cstdio>
#define N 105
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
using namespace std;
bool map[N][N];
int n,m;
void floyd()
{ FOR(k,1,n)
FOR(i,1,n)
FOR(j,1,n)
if((map[i][k]&&map[k][j])||map[i][j])
map[i][j]=true;
}
int main()
{ while(~scanf("%d%d",&n,&m)!=EOF&&n&&m)
{ FOR(i,1,n)初始化工作
FOR(j,1,n)
if(i==j) map[i][j]=true;
else map[i][j]= false;
FOR(i,1,m)
{ int a,b;
scanf("%d%d",&a,&b);
map[a][b]=true;
}
floyd();
int ans=0;
FOR(i,1,n)
{ int sum=0;
FOR(j,1,n)
if(i==j) continue;
else{ if(map[i][j]||map[j][i]) sum++;
if(sum==n-1) ans++;
}
}
printf("%d\n",ans);
} return 0;
}
这篇关于http://acm.nyist.net/JudgeOnline/problem.php?pid=211有向图传递闭包问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!