1013 Battle Over Cities (25 分)

捕获.PNG

涉及到图的邻接矩阵存储,图的深度优先搜索,图的连通分量数

该题输入输出要使用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

posted @ 2019-03-06 15:00  Chance-Zou  阅读(305)  评论(0编辑  收藏  举报