題意:
大腦有很多區塊,如果某個區塊旁邊有三塊已開發區塊,那這個區塊隔一年就可以變成已開發
給你區塊的數量,區塊連接情況,以及已開發的區塊是誰
問說要幾年之後才會全部變成已開發,或是無法完全開發
解法:
用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;
}