Day41: [PAT甲级] 1013 Battle Over Cities (25分)
题源:
来自PAT真题库:
https://pintia.cn/problem-sets/994805342720868352/problems/994805500414115840
代码:
dirty code凑合看吧
ps.还有一种并查集的思路。但是要注意路径压缩!
pps.这道题我最先用邻接矩阵+BFS的方法,有一个用例超时了。后来发现是因为自己有个地方搞错了,BFS是入队时就要进行访问,不是出队!
#include<iostream>
#include<string>
#include<vector>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;
int N, M, K;
int x, y;
vector<vector<int> > V;
vector<bool> collected;
void DFS(int X) {
collected[X] = true;
for (int i=1;i<=N;i++) {
if(V[X][i]==1&& i != x&& collected[i] == false)
DFS(i);
}
}
int main() {
cin >> N >> M >> K;
collected.resize(N + 1, false);
V.resize(N + 1, vector<int>(N + 1, 0));
for (int i = 0; i < M; i++) {
scanf("%d %d", &x, &y);
V[x][y] = V[y][x] = 1;
}
for (int i = 0; i < K; i++) {
scanf("%d", &x);
int count = 0;
fill(collected.begin(),collected.end(),false);
for (int i = 1; i <= N; i++) {
if (i != x && collected[i] == false) {
DFS(i);
count++;
}
}
printf("%d\n", count - 1);
}
return 0;
}
来源:CSDN
作者:qq2215459786
链接:https://blog.csdn.net/qq2215459786/article/details/103834625