題意:

給你一個有向圖,求這個圖連不到的點有幾個,有哪些

起點不會算在"可連到的"之內

 

解法:

對起點做DFS  Traversal,然後印出連不到的人

 

程式碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int n;
char map[123][123];
char v[123];
int num;
void DFS(int now){
    int i;
    for(i=1;i<=n;++i){
        if(!v[i] && map[now][i]){
            ++num;
            v[i] = 1;
            DFS(i);
        }
    }
}
int main(){
    int i,j;
    while(scanf("%d",&n)!=EOF && n){
        memset(map,0,sizeof(map));
        while(scanf("%d",&i)!=EOF && i){
            while(scanf("%d",&j)!=EOF &&j){
                map[i][j] = 1;
            }
        }
        scanf("%d",&j);
        while(j--){
            memset(v,0,sizeof(v));
            num =  0;
            scanf("%d",&i);
            DFS(i);
            printf("%d",n-num);
            for(i=1;i<=n;++i){
                if(!v[i])printf(" %d",i);
            }
            puts("");
        }
    }

    return 0;
}

arrow
arrow
    全站熱搜

    alan790712 發表在 痞客邦 留言(0) 人氣()