PAT甲级真题1013. Battle Over Cities (25)(图的遍历,统计强连通分量的个数,dfs)

来源:互联网 发布:七天网络阅卷组织代码 编辑:程序博客网 时间:2024/06/05 00:48

用邻接矩阵存储图。深度优先搜索求连通图的个数。
每一次重新输入数据时要把Visited数组全部置为false。

// 1013. Battle Over Cities (25).cpp : 定义控制台应用程序的入口点。////求一个图中连通分量的个数#include <iostream>using namespace std;int V[1010][1010];bool Visited[1010];int N, M, K;void dfs(int node){    Visited[node] = true;    for (int i = 1; i <= N; i++)    {        if (Visited[i] == false && V[node][i] == 1)            dfs(i);    }}int main(){    cin >> N >> M >> K;    for (int i = 0; i < M; i++)    {        int a, b;        cin >> a >> b;        V[a][b] = V[b][a] = 1;    }    for (int i = 0; i < K; i++)    {        fill(Visited, Visited + 1010, false);       //每次都要把Visited全部置为false,表示未访问。        int cnt = 0;                                //连通图的个数        int a;        cin >> a;        Visited[a] = true;        for (int j = 1; j <= N; j++)        {            if(Visited[j]==false)            {                dfs(j);                cnt++;            }        }        cout << cnt - 1 << endl;    }    return 0;}
0 0
原创粉丝点击