時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:4 描述
乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門(n<=5),它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這個門所需的所有鑰匙(每個門都至少有一把鑰匙),例如:現在a門有三把鑰匙,acm就必須找全三把鑰匙才能開啟a門。現在請你編寫乙個程式來告訴acm,他能不能順利的得到寶藏。
輸入
輸入可能會有多組測試資料(不超過10組)。
每組測試資料的第一行包含了兩個整數m,n(1
輸出每行輸出乙個yes表示acm能找到寶藏,輸出no表示acm找不到寶藏。
樣例輸入
4 4s.x.
a.x.
..xg
....
3 4
s.xa
.axb
b.ag
0 0
樣例輸出
yesno
#include #include #include #include #include using namespace std;
int visit[20][20];
char map[20][20];
int dx = ;//方向
int dy = ;
int n, m;
int x_st, y_st, x_end, y_end;//開始和結束的位置
int f;//標誌位,為1時,說明可以找到寶藏,為0,則找不到
int key[5];//地圖中各種鑰匙的總數
int kk[5];//蒐集到的鑰匙
typedef struct
data;//存放在佇列中
typedef struct
suo;//存放在棧裡
stackp;
queueq;
void bfs()
if (map[k][l] >= 'a' && map[k][l] <= 'e')//若此位置為鑰匙
else if (map[k][l] >= 'a' && map[k][l] <= 'e')//若為門
else//若不能開啟, 入棧
}visit[k][l] = 1;
data c;
c.x = k;
c.y = l;
q.push(c);}}
if (f == 1)
break;
}return ;
}int main()
else if (map[i][j] == 'g')//找到寶藏的位置
else if (map[i][j] >= 'a' && map[i][j] <= 'e')//統計所有的鑰匙
key[map[i][j] - 'a']++;
}getchar();
} for (int i = 0; i < 5; i++)//每個門至少有一把鑰匙
if (key[i] == 0)
key[i] = 1;
visit[x_st][y_st] = 1;
data data;
data.x = x_st;
data.y = y_st;
q.push(data);//起點入隊
bfs();//廣搜
if (f == 1)//找到了寶藏
printf("yes\n");
else//找不到寶藏
bfs();
if (f == 1)
break;
}if (f == 1)
printf("yes\n");
else
printf("no\n");
} }return 0;
}
迷宮尋寶(一) nyoj 82
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...
Nyoj 82 迷宮尋寶(一)
include include include include using namespace std const int maxn 25 struct point pos point pos targetpos,doorpos 5 寶藏的位置,每個門的位置 char graph maxn maxn...
NYOJ82 迷宮尋寶(一)
時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 乙個叫acm的尋寶者找到了乙個藏寶圖,它根據藏寶圖找到了乙個迷宮,這是乙個很特別的迷宮,迷宮裡有n個編過號的門 n 5 它們分別被編號為a,b,c,d,e.為了找到寶藏,acm必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...