用DFS搜索一下,然后看需要搜几次,这一步可以得到有多少个独立的区域。设为N,则所需要的高速路数为N-1
#include <iostream>
#include <string.h>
using namespace std;
const int MAX=1001;
int N,M,K;
int edge[MAX][MAX];
int concern[MAX];
int visited[MAX];
bool dfs(int src){
visited[src]=1;
for(int i=1;i<=N;i++){
if(!visited[i] && edge[i][src]==1)
dfs(i);
}
}
int main(int argc,char **argv){
cin>>N>>M>>K;
int from,to;int num;
memset(edge,0,sizeof(edge));
for(int i=0;i<M;i++){ //create adj martix
cin>>from>>to;
edge[from][to]=1;
edge[to][from]=1;
}
for(int i=1;i<=K;i++)
cin>>concern[i];
for(int i=1;i<=K;i++){
num=0;
int node=concern[i];
memset(visited,0,sizeof(visited));
visited[node]=1;
for(int j=1;j<=N;j++){
if(visited[j]==0){
dfs(j);
num++;
}
}
printf("%d\n",num-1);
}
return 0;
}