T_T心情超级不好啊啊啊啊。
这道题想法挺简单的,DFS也做过好多遍了,想到了并查集但没弄清楚怎么做,留个问号在这里吧。
选择的是邻接矩阵T口T,所幸有关图的数据量不大。
#include <stdio.h>
/*t偷个懒用邻接矩阵*/
int Graph[1000][1000];
int visited[1000];
int N;
void Initvisted();
void DFS(int v);
int main()
{
int M, K,i,j,v,u,cnt;
scanf("%d %d %d", &N, &M, &K);
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
Graph[i][j] = 0;/*初始化图*/
for (i = 0; i < M; i++) {/*插入边*/
scanf("%d %d", &u, &v);
Graph[u-1][v-1] = 1;
Graph[v-1][u-1] = 1;
}
for (i = 0; i < K; i++) {
scanf("%d", &v);
Initvisted();
visited[v - 1] = 1;
cnt = 0;
for (j = 0; j < N; j++)
if (!visited[j]) {
cnt++;
DFS(j);
}
printf("%d\n",cnt-1);
}
return 0;
}
void Initvisted()
{
for (int i = 0; i < N; i++)
visited[i] = 0;
}
void DFS(int v)
{
visited[v] = 1;
int u;
for (u = 0; u < N; u++)
if (Graph[v][u] && !visited[u])
DFS(u);
}