【dfs】【链表】连通图 (ssl 1758)

版权声明:欢迎借鉴,谢绝抄搬。 https://blog.csdn.net/ssllyf/article/details/85856964

连通图
ssl 1758

题目大意

有一个由n个点组成的无向图,检测他是否联通


原题

判断一个图是否为一个边通图

Input

n 顶点 (n<=100)

Output

1 表示连通

0 表示不边通

Sample Input

5

1 2

2 3

5 4

0 0

Sample Output

0


解题方法

用dfs+链表从1开始搜,看是否能搜到n个点(包括1)

#include<cstdio>
#include<iostream>
using namespace std;
int s[101],n,x,y,w;
bool p[101];
struct rec
{
	int ss,next;//链表
}a[10005];
int dfs(int now)
{
	int t=1;//自己
	p[now]=1;//记录
	for (int i=s[now];i;i=a[i].next)//枚举连接这个点的每一条线
	  if (!p[a[i].ss]) t+=dfs(a[i].ss);//判断到过没,再dfs
	return t;
}
int main()
{
	scanf("%d%d%d",&n,&x,&y);
	while (x&&y)
	{
		a[++w].ss=y;//下一个数
		a[w].next=s[x];//同一个点的另一条线
		s[x]=w;//代替
		a[++w].ss=x;//和上面相反
		a[w].next=s[y];
		s[y]=w;
		scanf("%d%d",&x,&y);
	}
	if (dfs(1)==n) printf("1");//等于n就输出1
	else printf("0");//否则输出0
}

猜你喜欢

转载自blog.csdn.net/ssllyf/article/details/85856964
SSL
今日推荐