#include <iostream> using namespace std; //邻接矩阵存储图 //深度优先搜索遍历图 //攻占掉一个点后,计算图的连通份量的个数 int v[1001][1001]; bool visit[1001];//记录该点是否被访问过 int n; //递归形式的深度优先搜索 void dfs(int node) { visit[node] = true; for (int i = 1;i <= n;i++) { if (!visit[i] && v[node][i]==1) dfs(i); } } int main() { int m, k; scanf("%d %d %d", &n, &m, &k); //cin >> n >> m >> k;//n座城市,m条路,k个检查城市 for (int i = 0;i < m;i++) { int a, b; scanf("%d %d", &a, &b); //cin >> a >> b; v[a][b] = 1; v[b][a] = 1; } while (k--) { fill(visit, visit + 1001, false);//初始化为false int g, cnt = 0; scanf("%d", &g); //cin >> g; visit[g] = true; for (int i = 1;i <= n;i++) { if (!visit[i]) { dfs(i); cnt++; } } printf("%d\n", cnt - 1); //cout << cnt - 1 << endl; } return 0; }
参考博客:https://blog.csdn.net/whl_program/article/details/77627856node