题目:1013. Battle Over Cities (25)
#include <stdio.h>
#include <malloc.h>
void Dfs(int v,int visit[],int city);
int FindAns(int city,int visit[]);
void Initvisit(int visit[]);
int arc[1000][1000];//储存弧信息
int vernum;//顶点总个数,
int main()
{
int m,k,i;
scanf("%d %d %d",&vernum,&m,&k);
for(i=0;i<m;i++)//该循环用于初始化弧信息
{
int c1,c2;
scanf("%d %d",&c1,&c2);
arc[c1][c2]=1;
arc[c2][c1]=1;
}
for(i=0;i<k;i++)
{
int city,ans;
scanf("%d",&city);
int *visit=(int *)malloc((vernum+1)*sizeof(int));//注意每次visit数组都需要重新初始化
Initvisit(visit);//初始化visit数组
ans=FindAns(city,visit);//传递city和visit
printf("%d\n",ans);
}
return 0;
}
void Initvisit(int visit[])
{
int i;
for(i=1;i<=vernum;i++)visit[i]=0;//visit数组初始化为未访问
}
int FindAns(int city,int visit[])
{
int i=1,count=0;//count数组用于记录未联通图个数
while(1)
{
if(visit[i]==0&&i!=city)
{
Dfs(i,visit,city);
count++;
}
if(i==vernum)break;
i++;
}
return count-1;
}
void Dfs(int v,int visit[],int city)//Dfs深度优先搜索
{
int i;
visit[v]=1;
for(i=1;i<=vernum;i++)
{
if(arc[v][i]&&i!=city)
{
if(!visit[i])
Dfs(i,visit,city);
}
}
return;
}