1013. Battle Over Cities

Posted Mel年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1013. Battle Over Cities相关的知识,希望对你有一定的参考价值。

好久都没有做题了,从长沙回来之后一直就是看看QT,感觉自己真的要蠢死了><不开心不开心

 

 

题目大概意思就是从一个图里面去掉一个点,看看剩下多少个孤立点。

自己想了好大一会儿没有思路,看到网上一个代码,真是惊叹好神奇...><

用遍历的方式,如DFS,将去掉的点设为1,然后遍历一次看看剩下多少个没有被遍历到的点。

 

 

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

#define MAX_VERTEX_NUM 1005

int visit[MAX_VERTEX_NUM];

typedef struct
{
    int vexs[MAX_VERTEX_NUM];
    bool edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
    int vexnum,edgenum;
}MGraph;

MGraph g;


void dfs(int from){
    int i;
    for(i=1;i<=g.vexnum;i++){
        if(i!=from&&visit[i]==0&&g.edges[from][i]==1){
            visit[i]=1;
            dfs(i);
        }
    }
}


int main()
{

    int n,k,m,city,count;
    cin>>n>>m>>k;
    g.vexnum=n;
    g.edgenum=m;
    memset(g.edges,0,sizeof(g.edges));
    int c1,c2;
    for(int i=0;i<m;i++){
        cin>>c1>>c2;
        g.edges[c1][c2]=g.edges[c2][c1]=true;
    }

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


    return 0;
}

 

以上是关于1013. Battle Over Cities的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1013. Battle Over Cities

PAT1013: Battle Over Cities

1013 Battle Over Cities

pat 1013 Battle Over Cities(25 分) (并查集)

1013 Battle Over Cities (25分) DFS | 并查集

1013. Battle Over Cities (25)(连通分量个数 并查集)