进阶实验6-3.1 红色警报 (25 分)

解决思路:每当一个城市被攻占以后,把这个城市的所有的邻边都删掉,并且lost[city]==true来表示该城市已经被占领,在ListComponents()函数中计算连通分量个数时就跳过这个city。从而,如果删除city后的连通分量的个数大于删除前的连通分量个数,说明该城市是一个枢纽否则是一个普通城市。

易错点:1、每次在执行ListComponents()函数时,一定要把vis[]数组重置为false。2、当K==N时,在最后输出Game Over!

补充:统计无向图中连通集个数有两种方法:1、用并查集 。2、图的遍历。我的解法是图的DFS

下面是代码:

#include
#define MAXV 505
#define INF 65535
#include
using namespace std;
int n,G[MAXV][MAXV];
bool lost[MAXV]= {false};
bool vis[MAXV] = { false };
void DFS(int v)
{
	int w;
	vis[v] = true;
	for(w=0; w

 

你可能感兴趣的:(数据结构学习与实验指导)