nyoj82迷宮尋寶(一)

2021-06-18 23:39:57 字數 1983 閱讀 8378

時間限制:

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 4 

s.x.

a.x.

..xg

....

3 4

s.xa

.axb

b.ag

0 0

樣例輸出

yes 

no

#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必須開啟門,但是,開門之前必須在迷宮裡找到這個開啟這...