PAT1013. Battle Over Cities (25)

题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1013

深度优先搜索的问题。

代码如下:

//#include "StdAfx.h"
#include<map>
#include<string>
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
#include<set>
using namespace std;

bool connect[1010][1010],f[1010],connectTemp[1010][1010],fTemp[1010];
int n,m,k;

void dfs(int i)
{
	int j;
	for(j=1;j<=n;j++)
	{
		if(connectTemp[i][j]&&f[j]==false)
		{
			f[j]=true;
			dfs(j);
		}
	}
	return;
}

int main()
{
	//freopen("D://test.txt","r",stdin);
	memset(connect,0,sizeof(connect));
	
	cin>>n>>m>>k;
	int i,j,h;
	for(i=0;i<m;i++)
	{
		int t1,t2;
		cin>>t1>>t2;
		connect[t1][t2]=connect[t2][t1]=true;
	}
	for(i=0;i<k;i++)
	{
		memset(f,0,sizeof(f));
		for(j=1;j<=n;j++)
		{
			for(h=1;h<=n;h++)
			{
				connectTemp[j][h]=connect[j][h];
			}
		}
		
		int t;
		cin>>t;
		for(j=1;j<=n;j++)
		{
			connectTemp[t][j]=connectTemp[j][t]=0;
		}
		int count=0;
		for(j=1;j<=n;j++)
		{
			if(!f[j])
			{
				count++;
				fTemp[j]=true;
				dfs(j);
			}
		}
		cout<<count-2<<endl;
	}
	return 0;
}


你可能感兴趣的:(编程,ACM,pat,浙大)