链接: https://pan.baidu.com/s/1J4qlkLwjHxXYGNsbqb38cQ
提取码: bt3x
链接: https://pan.baidu.com/s/1J4qlkLwjHxXYGNsbqb38cQ
提取码: bt3x
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 100;
int p[maxn][maxn]; //P来表示图的邻接矩阵
int known[maxn]; //标记矩阵
int v,e; // v,e为连接的顶点
/*
把一个图的所有顶点都进行一次DFS,当然,
进行DFS的前提必须是这个点没有被遍历过。所以如果一个图是连通的,
那么从一个点开始DFS,所有的点都会被遍历到,这样其他4个顶点就不用再DFS了。按
照这个思路,定义一个count为DFS过顶点的个数,如果count=1,则图为连通的,否
则就是大于1,,这样就是不连通的。
*/
void DFS(int s)
{
for(int u=0; u<v; u++)
{
if(!known[u]&&p[s][u])
{
known[u] = 1;
DFS(u);
}
}
return;
}
int main()
{
while(scanf("%d%d",&v,&e)!=EOF)
{
memset(p,0,sizeof(p));
memset(known,0,sizeof(known));
int s,t;
for(int i=0; i<e; i++)
{
scanf("%d%d",&s,&t);
p[s][t] = 1;
p[t][s] = 1;
}
int count = 0;
for(int i=0; i<v; i++)
{
if(!known[i])
{
DFS(i);
count++;
}
}
if(count == 1)
{
printf("是连通图\n");
}else{
printf("不是连通图,count=%d\n",count);
}
}
return 0;
}