算法题,进链接看文本,不限语言c/c++/python,会的留下代码/伪代码分析也行

链接: 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;
}