一家人

一吻成箴 2013-11-19 09:03:33
/*给N个人之间的M条关系。询问Q次某两人是不是一家人(即这两个人可不可以通过若干关系相联系)。

输入
第一行是三个自然数N,M,Q(均不超过100)。接下来M行,每行两个数,表示这两个编号代表的人之间有关系。在接下来Q行,
每行两个书,询问这两个编号代表的人是不是一家人。
输出
对于每个询问输出一行,如果是一家人,输出"Yes",否则输出"No"。
样例输入
3 1 2
1 2
1 2
1 3
样例输出
Yes
No
*/


那位算法高手指点一下或者给一下这题的代码呗?、谢谢了
...全文
123 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一吻成箴 2013-11-22
  • 打赏
  • 举报
回复
非常感谢,能加一下你Q吗?
netbooting 2013-11-20
  • 打赏
  • 举报
回复

#include <stdio.h>

int main(void)
{
	int   N, M, Q;
	int   p, i, j, a, b;
	/* 用二维表来表示a和b之间的关系,0表示没有关系,1表示有关系 */
	int   buf[100][100] = {0};

	scanf("%d%d%d", &N, &M, &Q);
	for (p = 0; p < M; p++) {
		scanf("%d%d", &a, &b);
		/* a和b有关系,则b和a也有关系 */
		buf[a-1][b-1] = 1;
		buf[b-1][a-1] = 1;
		/* 对于每次输入,检测a和b与其他人的关系 */
		for (i = 0; i < N; i++) {
			for (j = 0; j < N; j++) {
				/* 检测a行关系 */ 
				if (buf[a-1][i] == 1 && buf[a-1][j] == 1)
					buf[i][j] = 1;
				/* 检测b行关系 */ 
				if (buf[b-1][i] == 1 && buf[b-1][j] == 1)
					buf[i][j] = 1;	
			}
		}
	}
	
	for (p = 0; p < Q; p++) {
		scanf("%d%d", &a, &b);
		if (buf[a-1][b-1])
			printf("Yes\n");
		else
			printf("No\n");
	}

	return 0;	
}

/*
输出结果:
3 1 2
1 2
1 2
Yes
1 3
No
*/

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧