连通图
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);//判断到过没,再dfsreturn 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就输出1else printf("0");//否则输出0
}