您的位置:首页 > 其它

PAT:图的独立子图个数:DFS

2016-05-03 20:47 344 查看

1013. Battle Over Cities

思路

(1)题目给出一张图,以及几条边。要求当去掉其中的一个顶点后为了使剩下的顶点可以连通需要增加多少条边。

(2)其实只要考虑去掉这个顶点后,剩余的顶点可以组成几个独立的区域,假设该区域数为t,则需要增加的边即为t-1。

(3)为了实现(2)中所说,我们采用DFS(深度优先)最佳。

#include<stdlib.h>
#include<limits.h>
#include<iostream>
#include<cmath>
#include<vector>
#include<string>
#include<stack>
#include<algorithm>

using namespace std;

int n,m,k;
int edge[1005][1005]={0};//采用邻接矩阵的方式
int book[1001]={0};
int nums=0;

void dfs(int c)
{
book[c]=1;
for(int i=1;i<=n;i++)
if(book[i]==0 && edge[i][c]==1)
{
dfs(i);
}
}

int main()
{
cin>>n>>m>>k;
int a,b,c;
for(int i=0;i<m;i++)
{

vector<int> v2;
cin>>a>>b;
edge[a][b]=1;
edge[b][a]=1;
}
for(int i=0;i<k;i++)
{
cin>>c;
nums=0;
for(int j=1;j<n+1;j++)
book[j]=0;
book[c]=1;
for(int j=1;j<n+1;j++)
{
if(book[j]==0)
{
dfs(j);
nums++;//遍历产生一个独立子图,nums++
}

}
cout<<(nums-1)<<endl;
}
return 0;
}


#

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: