问题描述:去掉无向图中的一个城市,将剩下的城市连接起来至少需要修多少条路。
解题思路:也就是去掉一点后求连通分量数。
AC代码:
/*1013 Battle Over Cities (25 分)
*dfs+连通分量
*/
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
#define MAX 1001
vector<int>city[MAX];
int N,M,K;
bool vis[MAX];
void visit(int v)//访问
{
vis[v]=1;
for(int i=0;i<city[v].size();++i){
if(!vis[city[v][i]])visit(city[v][i]);
}
}
int dfs(int v)//dfs遍历
{
memset(vis,0,N+1);
vis[v]=1;
int cnt=-1;
for(int i=1;i<=N;++i){
if(!vis[i]){
visit(i);
++cnt;
}
}
return cnt;
}
int main()
{
//freopen("test.txt","r",stdin);
scanf("%d %d %d",&N,&M,&K);
int c,c1,c2;
while(M--){
scanf("%d %d",&c1,&c2);
city[c1].push_back(c2);
city[c2].push_back(c1);
}
while(K--){
scanf("%d",&c);
printf("%d\n",dfs(c));
}
return 0;
}