1013.Battle Over Cities

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:57   2374   0

【题意】

给出一些城市之间连接的道路,假如去掉某个城市,计算要使得剩下城市保持联通需要补上的道路数量


【思路】
去掉某个城市后,对剩下的城市进行DFS,根据DFS的次数算出共有几个连通分量,连通分量数-1即是需要补上的道路数

#include <iostream>
#include <cstring>
using namespace std;

#define MAXN 1000

int road[MAXN][MAXN],visited[MAXN];//visited表示在dfs中是否被访问到

void dfs(int j, int check, int n){
 visited[j] = 1;
 for(int i=0; i<n; i++){
  if(i!=j && i+1!=check && road[j][i] && !visited[i]){
   dfs(i,check,n);
  }
 }
}

int main(int argc, char const *argv[])
{
 int n,m,k,c1,c2;
 int check,count//check代表要检测的城市,count表示连通分量数目
 memset(road,0,sizeof(road));

 cin >> n >> m >> k;
 for(int i=0; i<m; i++){
  cin >> c1 >> c2;
  road[c1][c2] = road[c2][c1] = 1;
 }

 for(int i=0; i<k; i++){
  cin >> check;
  memset(visited,0,sizeof(visited));
  count = 0;
  for(int j=0; j<n; j++){
   if (j+1!=check && !visited[j])
   {
    count++;
    dfs(j,check,n);
   }
  }
  cout << count-1;
  if (i!=k-1)
  {
   cout << endl;
  }
 }

 system("pause");
 return 0;
}


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP