A10131013 Battle Over Cities (25分)

一、技术总结

  1. 这一题是考查图的知识,题目的意思要理解清楚,就是考查统计图中连通块的数量,也就是没有一个结点后。
  2. 怎么删除该结点,并且统计连通块的数量成为问题解决的关键,这里可以当访问到结点时,直接返回,或则跳过,这种操作就是相当于删除了该结点。
  3. memset(inq, false, sizeof(inq));这个是初始化标记数组,可以用于反复的遍历数组。
  4. 还有这次出现了一个比较简单的问题,就是在写for循环的嵌套时,同时使用了i变量,导致答案错误,这种问题一下又检查不出来,细心点。

二、参考代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
vector<int> Adj[maxn];
bool inq[maxn];
int node;//need to delete node 
void DFS(int v){
	if(v == node) return;
	inq[v] = true;
	for(int i = 0; i < Adj[v].size(); i++){
		int u = Adj[v][i];
		if(inq[u] == false){
			DFS(u);
		}
	}
} 
int main(){
	int n, m, k;
	scanf("%d%d%d", &n, &m, &k);
	int a, b;
	for(int i = 1; i <= m; i++){
		scanf("%d %d", &a, &b);
		Adj[a].push_back(b), Adj[b].push_back(a);
	}
	for(int i = 0; i < k; i++){
		scanf("%d", &node);
        memset(inq, false, sizeof(inq));
		int sum = 0;
		for(int j = 1; j <= n; j++){
			if(j != node && inq[j] == false){
				DFS(j);
				sum++;
			}
		}
		printf("%d
", sum-1);
	}
	return 0; 
}
作者:睿晞
身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
原文地址:https://www.cnblogs.com/tsruixi/p/12374358.html