1013. Battle Over Cities (25)

来源:互联网 发布:红蜘蛛破解软件 编辑:程序博客网 时间:2024/06/07 09:17

题目大意

有N个城市,如果其中一个被敌军占领,连接到这个城市的所有高速公路就会关闭。但有可能造成其他的城市不联通了,找出需要修复几条路可以把整个图连通

思路

除去被占领的城市,计算有几个连通分支。
用visit[ ]保存所有城市是否别访问,然后对每个没有被访问的城市DFS,然后分支数++

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int graph[1000][1000];//先建立一个图 void DFS(int N,int deletecity,int start,int visit[]){    visit[start] = 1;//访问过这个结点了    for (int i = 0; i < N; i++) {        if (visit[i] == 0 && i != deletecity && graph[start][i] == 1)            DFS(N, deletecity, i, visit);    }}int main(){    int  N, M, K;    scanf("%d%d%d", &N, &M, &K);    for (int i = 0; i < N; i++)        for (int j = 0; j < N; j++)            graph[i][j] = 0;    int x, y;    for (int i = 0; i < M; i++) {        scanf("%d%d", &x,&y);        graph[x - 1][y - 1] = 1;        graph[y - 1][x - 1] = 1;    }    int deletecity, visit[1000], cnt;    for (int i = 0; i < K; i++) {        scanf("%d", &deletecity);        deletecity -= 1;        cnt = -1;        for (int j = 0; j < N; j++)            visit[j] = 0;        for (int j = 0; j < N; j++) {            if (visit[j] == 0 && j != deletecity) {//搜索                DFS(N, deletecity, j, visit);                cnt++;            }        }        printf("%d\n", cnt);    }    system("pause");    return 0;}
0 0