版权声明:欢迎借鉴,谢绝抄搬。 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
}