Day41: [PAT甲级] 1013 Battle Over Cities (25分)

拟墨画扇 提交于 2020-01-15 06:13:28

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;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!