MURMUR facebook PLURK twitter   

題意:

大腦有很多區塊,如果某個區塊旁邊有三塊已開發區塊,那這個區塊隔一年就可以變成已開發

給你區塊的數量,區塊連接情況,以及已開發的區塊是誰

問說要幾年之後才會全部變成已開發,或是無法完全開發

 

解法:

用BFS

對於未開發區塊記錄一個counter,把已開發區塊丟入queue裡面,然後就跑BFS,已開發區塊把有連接的未開發區塊加counter,直到counter等於3的時候丟入queue裡面

最後如果queue裡面的數量小於n表示有人沒跑到,輸出無法完全開發

如果等於n的話,queue中最後一位的步數就會是答案

 

程式碼:

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

int n,m;
char str[1234];
int q[1234][2];
int qNum;
char map[256][256];
int v[256];
int main(){
    int i,j;
    while(scanf("%d %d",&n,&m)!=EOF){
        gets(str);
        gets(str);
        memset(map,0,sizeof(map));
        memset(v,0,sizeof(v));
        for(qNum=0;str[qNum]!='\0';++qNum){
            q[qNum][0] = str[qNum];
            q[qNum][1] = 0;
            v[str[qNum]] = 4;
        }
        while(m--){
            gets(str);
            map[str[0]][str[1]] = map[str[1]][str[0]] = 1;
        }
        for(i=0;i<qNum;++i){
            for(j='A';j<='Z';++j){
                if(v[j]<3 && map[q[i][0]][j]) ++v[j];
                if(v[j]==3){
                    q[qNum][0] = j;
                    q[qNum][1] = q[i][1]+1;
                    ++qNum;
                    ++v[j];
                }
            }
        }
        if(qNum<n)puts("THIS BRAIN NEVER WAKES UP");
        else printf("WAKE UP IN, %d, YEARS\n",q[qNum-1][1]);
    }
    return 0;
}

arrow
arrow
    全站熱搜

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