首页 > 其他 > 详细

1013. Battle Over Cities

时间:2016-11-29 06:09:59      阅读:248      评论:0      收藏:0      [点我收藏+]

好久都没有做题了,从长沙回来之后一直就是看看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

原文:http://www.cnblogs.com/Qmelbourne/p/6111747.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!