• 1013. Battle Over Cities (25)(DFS遍历)


    For example, if we have 3 cities and 2 highways connecting city1-city2 and city1-city3. Then if city1 is occupied by the enemy, we must have 1 highway repaired, that is the highway city2-city3.

    Input

    Each input file contains one test case. Each case starts with a line containing 3 numbers N (<1000), M and K, which are the total number of cities, the number of remaining highways, and the number of cities to be checked, respectively. Then M lines follow, each describes a highway by 2 integers, which are the numbers of the cities the highway connects. The cities are numbered from 1 to N. Finally there is a line containing K numbers, which represent the cities we concern.

    Output

    For each of the K cities, output in a line the number of highways need to be repaired if that city is lost.

    Sample Input

    3 2 3
    1 2
    1 3
    1 2 3
    

    Sample Output

    1
    0
    0
    题目大意:给出n个城市之间有相互连接的m条道路,当删除一个城市和其连接的道路的时候,
    问其他几个剩余的城市至少要添加多少个路线才能让它们重新变为连通图,其实就是求连通分支数
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 
     5 int graph[1001][1001];
     6 int visited[1001];
     7 int n,m,k;
     8 void dfs( int a)
     9 {
    10     int i;
    11     visited[a]=1;
    12     for( i=1; i<=n; i++)
    13     {
    14         if( visited[i]==0 && graph[a][i]==1)
    15             dfs(i);
    16     }
    17 }
    18 int main()
    19 {
    20     int cnt=0,temp;
    21     int i,j;
    22     int a,b;
    23     scanf("%d%d%d",&n,&m,&k);
    24     for( i=0; i<m; i++)  //创建图
    25     {
    26         scanf("%d%d",&a,&b);
    27         graph[a][b]=graph[b][a]=1;
    28     }
    29     for( i=0; i<k ; i++)
    30     {
    31         cnt=0;
    32         memset( visited,0,sizeof(visited));  //每次都将visited全置0
    33         scanf("%d",&temp);
    34         visited[temp]=1;
    35         for( j=1; j<=n; j++)
    36         {
    37             if( visited[j]==0)
    38             {
    39                 dfs(j);
    40                 cnt++;  //连通分支数
    41             }
    42         }
    43         printf("%d
    ",cnt-1);  //需要建的高速为连通分支数减1 
    44     }
    45     return 0;
    46 }
    
    
    在这个国度中,必须不停地奔跑,才能使你保持在原地。如果想要寻求突破,就要以两倍现在速度奔跑!
  • 相关阅读:
    python manage.py runserver 0.0.0.0:8000 zkz的专栏 博客频道 CSDN.NET
    分享:Intel 发布 Android 模拟器的 x86 系统映像
    分享:TreeFrog 1.1 发布,C++ Web 应用开发框架
    update R on ubuntu
    分享:FastFlow 2.0 发布,多核编程框架
    分享:centos daemon make and install
    LINQ TO SQL三层架构~更新操作
    泛型中的协变
    MVC中的统一验证机制~续
    LINQ TO SQL三层架构~添加操作
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/8553461.html
Copyright © 2020-2023  润新知