传话

这题的Floyed的判环,我也是借助了别人写的添加链接描述
10188: 传话游戏
时间限制: 1 Sec 内存限制: 128 MB
提交: 208 解决: 50
[提交] [状态] [讨论版] [命题人:admin]
题目描述
有这样一个朋友网络,如果a认识b,那么a收到某个消息,就会把这个消息传给b,以及所有a认识的人。但是,请你注意,如果a认识b,b不一定认识a。现在我们把所有人从1到n编号,给出所有“认识”关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i(1≤i≤n)。

输入
第1行是两个数n(n<1000)和m(m<10000),两数之间有一个空格,表示人数和认识关系数。接下来的m行,每行两个数a和b,表示a认识b(1≤a,b≤n)。认识关系可能会重复给出,但1行的两个数不会相同。

输出
一共有n行,每行一个字符T或F。第i行如果是T,表示i发出一条新消息会传回给i;如果是F,表示i发出一条新消息不会传回给i。

样例输入
复制样例数据
4 6
1 2
2 3
4 1
3 1
1 3
2 3
样例输出
T
T
T
F

#include <stdio.h>
int a[1000][1000];
int main()
{
	int i,j,k;
	int x,y;
	int n,m;
	k=0;
	scanf("%d %d",&n,&m);
	for(i=0;i<m;i++)
	{
		scanf("%d %d",&x,&y);
		a[x][y]=1; 
	}
	for(k=1;k<=n;k++)   //这个地方从k开始,是为了检测所有的(未知,k)(k,未知),保证尾与首相同
		for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		if(a[i][j]!=1&&a[i][k]&&a[k][j])  
			a[i][j]=1;   //a[i][j]=1是i和j是相连的
	for(i=1;i<=n;i++)
		if(a[i][i]) printf("T\n");  //当你i与i相连时,输出为T
		else printf("F\n");
	return 0;
 }

可以例几种情况
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42868863/article/details/84787222
今日推荐