您的位置:首页 > 其它

pat1013Battle Over Cities (25)

2015-10-02 20:27 316 查看
题意分析:

(1)根据城市以及相互之间的道路分布地图,求出当其中一个城市被占领后(切断所有与其他城市连接的道路),让这个图中剩下的连通分量连接起来所需修的最少的道路数。

(2)求连通分量宜采用深度优先遍历

可能坑点:

(1)在计算道路被切断的时候,图中有多少个连通分量(极大联通子图)的个数时,不要忘记被占领的城市也是一个连通分量,这个连通分量要去掉。因此最后的结果是连通分量数-1-1

#include <iostream>
#include <string.h>
using namespace std;

int visit[1001]={0};
int map[1001][1001]={0};
int N,M,K;
void DFS(int start,int check)
{
if(start==check)return;
visit[start]=1;
for(int i=1;i<=N;i++)
{
if(map[start][i]&&!visit[i]&&i!=check)
{
DFS(i,check);
}
}
}
int main()
{
cin>>N>>M>>K;
int i=0;
int from,to;
while(i<M)
{
cin>>from>>to;
map[from][to]=1;
map[to][from]=1;
i++;
}
int j=0;
int check;
int connected=0;
while(j<K)
{
cin>>check;
for(int k=1;k<=N;k++)
{
if(visit[k]==0)
{
connected++;
DFS(k,check);
}
}
cout<<connected-2<<endl;
connected=0;
memset(visit,0,sizeof(visit));
j++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: