1013 Battle Over Cities (25 分)
涉及到图的邻接矩阵存储,图的深度优先搜索,图的连通分量数
该题输入输出要使用printf和scanf,cin和cout最后一个测试点会超时
#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/77627856