//1013. Battle Over Cities(25)
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 1001
int edge[MAX][MAX];
int visited[MAX];
int N, M, K;
void dfs(int node) {
visited[node] = 1;
for (int i = 1; i <= N; i++) {
if (!visited[i] && edge[i][node]) {
dfs(i);
}
}
}
int main() {
cin >> N >> M >> K;
int a, b;
for (int i = 0; i < M; i++) {
cin >> a >> b;
edge[a][b] = 1;
edge[b][a] = 1;
}
int c;
while(K--) {
int count = 0;
cin >> c;
memset(visited, 0, sizeof(visited));
visited[c] = 1;
for (int j = 1; j <= N; j++) {
if (visited[j] == 0) {
/*进行深度优先遍历,如果单源顶点联通,则一次遍历之后所有节点访问标志
置为1,退出for循环。也即,在count等于1的基础上,每多一个顶点的值为1,count
+1,表明通过此点进行深度优先遍历有两个点是连接不上的,也即需要补充几条边*/
dfs(j);
count++;
}
}
cout << count - 1 << endl;
}
return 0;
}
PAT (Advanced Level)1013. Battle Over Cities (25) DFS
最新推荐文章于 2023-01-01 13:28:19 发布