[蓝桥杯2019初赛]迷宫-bfs+存储路径
生活随笔
收集整理的這篇文章主要介紹了
[蓝桥杯2019初赛]迷宫-bfs+存储路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
下圖給出了一個迷宮的平面圖,其中標記為1 的為障礙,標記為0 的為可
以通行的地方。
010000
000100
001001
110000
迷宮的入口為左上角,出口為右下角,在迷宮中,只能從一個位置走到這
個它的上、下、左、右四個方向之一。
對于上面的迷宮,從入口開始,可以按DRRURRDDDR 的順序通過迷宮,
一共10 步。其中D、U、L、R 分別表示向下、向上、向左、向右走。
對于下面這個更復雜的迷宮(30 行50 列),請找出一種通過迷宮的方式,
其使用的步數最少,在步數最少的前提下,請找出字典序最小的一個作為答案。
請注意在字典序中D<L<R<U。
輸入:
01010101001011001001010110010110100100001000101010 00001000100000101010010000100000001001100110100101 01111011010010001000001101001011100011000000010000 01000000001010100011010000101000001010101011001011 00011111000000101000010010100010100000101100000000 11001000110101000010101100011010011010101011110111 00011011010101001001001010000001000101001110000000 10100000101000100110101010111110011000010000111010 00111000001010100001100010000001000101001100001001 11000110100001110010001001010101010101010001101000 00010000100100000101001010101110100010101010000101 11100100101001001000010000010101010100100100010100 00000010000000101011001111010001100000101010100011 10101010011100001000011000010110011110110100001000 10101010100001101010100101000010100000111011101001 10000000101100010000101100101101001011100000000100 10101001000000010100100001000100000100011110101001 00101001010101101001010100011010101101110000110101 11001010000100001100000010100101000001000111000010 00001000110000110101101000000100101001001000011101 10100101000101000000001110110010110101101010100001 00101000010000110101010000100010001001000100010101 10100001000110010001000010101001010101011111010010 00000100101000000110010100101001000001000000000010 11010000001001110111001001000011101001011011101000 00000110100010001000100000001000011101000000110011 10101000101000100010001111100010101001010000001000 10000010100101001010110000000100101010001011101000 00111100001000010000000110111000000001000000001011 10000001100111010111010001000110111010101101111000代碼如下:
#include <iostream> #include <cstring> #include <queue> using namespace std;const int N = 50; char g[N][N]; bool st[N][N]; char k[] = {'D', 'L', 'R', 'U'};//按字典序int dx[] = {1, 0, 0, -1}, dy[] = {0, -1, 1, 0};//按字典序struct node {int x;int y;string p; };void bfs(int x, int y) {queue<node>q;node start;start.x = x, start.y = y, start.p = "";q.push(start);st[start.x][start.y] = true;while (q.size()) {node t = q.front();q.pop();for (int i = 0; i < 4; i++) {int xx = t.x + dx[i], yy = t.y + dy[i];if (xx < 0 || xx >= 30 || yy < 0 || yy >= 50)continue;if (g[xx][yy] == '1' || st[xx][yy])continue;node next;next.x = xx;next.y = yy;next.p = t.p + k[i];st[xx][yy] = true;if (next.x == 29 && next.y == 49) {cout << next.p << endl;return ;}q.push(next);}} }int main() {for (int i = 0; i < 30; i++)cin >> g[i];bfs(0, 0);return 0; }答案為:
DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR
總結
以上是生活随笔為你收集整理的[蓝桥杯2019初赛]迷宫-bfs+存储路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [蓝桥杯2018初赛]方格计数-巧妙枚举
- 下一篇: AcWing 756. 蛇形矩阵