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(25 分) (并查集)