2019第十届蓝桥杯C/C++ A组省赛 —— 第四题:迷宫
生活随笔
收集整理的這篇文章主要介紹了
2019第十届蓝桥杯C/C++ A组省赛 —— 第四题:迷宫
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
試題 D: 迷宮
本題總分:10 分
【問題描述】
下圖給出了一個迷宮的平面圖,其中標記為 1 的為障礙,標記為 0 的為可以通行的地方。
010000
000100
001001
110000
迷宮的入口為左上角,出口為右下角,在迷宮中,只能從一個位置走到這 個它的上、下、左、右四個方向之一。
對于上面的迷宮,從入口開始,可以按DRRURRDDDR 的順序通過迷宮, 一共 10 步。其中 D、U、L、R 分別表示向下、向上、向左、向右走。
對于下面這個更復雜的迷宮(30 行 50 列),請找出一種通過迷宮的方式,其使用的步數最少,在步數最少的前提下,請找出字典序最小的一個作為答案。請注意在字典序中D<L<R<U。(如果你把以下文字復制到文本文件中,請務 必檢查復制的內容是否與文檔中的一致。在試題目錄下有一個文件 maze.txt, 內容與下面的文本相同)
【答案提交】
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一 個字符串,包含四種字母 D、U、L、R,在提交答案時只填寫這個字符串,填寫多余的內容將無法得分。
Code
/*^....0^ .1 ^1^.. 011.^ 1.0^ 1 ^ ^0.11 ^ ^..^0. ^ 0^.0 1 .^.1 ^0 .........001^.1 1. .111100....01^00 11^ ^1. .1^1.^ ^0 0^.^ ^0..1.1 1..^1 .0 ^ ^00. ^^0.^^ 0 ^^110.^0 0 ^ ^^^10.01^^ 10 1 1 ^^^1110.101 10 1.1 ^^^1111110010 01 ^^ ^^^1111^1.^ ^^^10 10^ 0^ 1 ^^111^^^0.1^ 1....^11 0 ^^11^^^ 0.. ....1^ ^ ^1. 0^ ^11^^^ ^ 1 111^ ^ 0.10 00 11 ^^^^^ 1 0 1.0^ ^0 ^0 ^^^^ 0 0.0^ 1.0 .^ ^^^^ 1 1 .0^.^ ^^ 0^ ^1 ^^^^ 0. ^.11 ^ 11 1. ^^^ ^ ^ ..^^..^ ^1 ^.^ ^^^ .0 ^.00..^ ^0 01 ^^^ .. 0..^1 .. .1 ^.^ ^^^ 1 ^ ^0001^ 1. 00 0. ^^^ ^.0 ^.1. 0^. ^.^ ^.^ ^^^ ..0.01 .^^. .^ 1001 ^^ ^^^ . 1^. ^ ^. 11 0. 1 ^ ^^ 0.0 ^. 0 ^0 1 ^^^ 0.0.^ 1. 0^ 0 .1 ^^^ ...1 1. 00 . .1 ^^^ ..1 1. ^. 0 .^ ^^ ..0. 1. .^ . 0 ..1 1. 01 . . ^ 0^.^ 00 ^0 1. ^ 1 1.0 00 . ^^^^^^ ..^ 00 01 ..1. 00 10 1 ^^.1 00 ^. ^^^ .1.. 00 .1 1..01 ..1.1 00 1. ..^ 10^ 1^ 00 ^.1 0 1 1.1 00 00 ^ 1 ^. 00 ^.^ 10^ ^^1.1 00 00 10^..^ 1. ^. 1.0 1 ^. 00 00 .^^ ^. ^ 1 00 ^0000^ ^ 011 0 ^. 00.0^ ^00000 1.00.1 11. 1 0 1^^0.01 ^^^ 01.^ ^ 1 1^^ ^.^1 1 0... 1 ^1 1^ ^ .01 ^ 1.. 1.1 ^0.0^ 0 1..01^^100000..0^1 1 ^ 1 ^^1111^ ^^0 ^ ^ 1 1000^.1 ^.^ . 00.. 1.1 0. 01. . 1. .^1. 1 1. ^0^ . ^.1 00 01^.0 001. .^*//* Procedural objectives:Variables required by the program:Procedural thinking:Functions required by the program:Determination algorithm:Determining data structure:*/ /* My dear Max said: "I like you, So the first bunch of sunshine I saw in the morning is you, The first gentle breeze that passed through my ear is you, The first star I see is also you. The world I see is all your shadow."FIGHTING FOR OUR FUTURE!!! *//* 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 <queue> #include <cstdio> #include <cstring> #include <iostream>using namespace std;int m=30,n=50; char map[70][70]; bool vis[70][70]; char dirc[4]={'D','L','R','U'}; int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0}};struct Node{string str;int x,y,step;Node(int xx,int yy,int ss,string s){x=xx;y=yy;step=ss;str=s;} };queue<Node> que;bool check(int x,int y){if(x<0 || x>m-1 || y<0 || y>n-1 || vis[x][y] || map[x][y]=='1')return false;return true; }void bfs(int x,int y){que.push(Node(0,0,0,""));vis[0][0]=true;while(!que.empty()){Node now=que.front();if(now.x==m-1 && now.y==n-1){cout<<now.str<<endl;cout<<now.step<<endl;break;}que.pop();for(int i=0;i<4;i++){int xx=now.x+dir[i][0];int yy=now.y+dir[i][1];if(check(xx,yy)){que.push(Node(xx,yy,now.step+1,now.str+dirc[i]));vis[xx][yy]=true;}}} }int main(){for(int i=0;i<m;i++)scanf("%s",map[i]);bfs(0,0);return 0; }總結
以上是生活随笔為你收集整理的2019第十届蓝桥杯C/C++ A组省赛 —— 第四题:迷宫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019第十届蓝桥杯C/C++ A组省赛
- 下一篇: Codeforces Global Ro