编程题走迷宫_C++程序算法题----迷宫(一)
題目:
一天蒜頭君掉進了一個迷宮里面,蒜頭君想逃出去,可憐的蒜頭君連迷宮是否有能逃出去的路都不知道。看在蒜頭君這么可憐的份上,就請聰明的你告訴蒜頭君是否有可以逃出去的路。
輸入格式
第一行輸入兩個整數 n和 m,表示這是一個 n×m的迷宮。接下來的輸入一個 n行 m列的迷宮。其中 'S' 表示蒜頭君的位置,'*'表示墻,蒜頭君無法通過,'.'表示路,蒜頭君可以通過'.'移動,'T'表示迷宮的出口(蒜頭君每次只能移動到四個與他相鄰的位置——上,下,左,右)。
輸出格式
輸出一個字符串,如果蒜頭君可以逃出迷宮輸出"yes",否則輸出"no"。
數據范圍
1≤n,m≤10。
Sample Input
3 4
S**.
..*.
***T
Sample Output
no
Sample Input 2
3 4
S**.
....
***T
Sample Output 2
yes
運用深度搜索。找到人的位置,因為只能從上下左右四個方向出發,所以每到一個點,先判斷是否是終點,然后考慮這個點是否是在該棋盤上,是否能走,是否已經走過。最后如果能出去,則輸出yes,否則輸出no。
代碼
#include
#include
#include
int n,m;
char road[15][15]; //棋盤
bool is_run[15][15]={false}; //是否已經走過
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; // 分別代表四個方向
bool out = false; //是否可以出去
using namespace std;
// 因為要從4個方向出發,所以需要判斷下一個點是否在地圖里
bool in_road(int x,int y){
return (0<=x&&x
}
void DFS(int x,int y){
if(road[x][y]=='T'){
//找到出口
out = true;
return;
}
if(!in_road(x,y)||road[x][y]=='*'||is_run[x][y]){
return;
}
is_run[x][y] = true;
for(int i=0;i<4;i++){
int tx = x+dir[i][0];
int ty = y+dir[i][1];
DFS(tx,ty);
}
return;
}
int main(){
int x,y;
cin>>n>>m;
for(int i=0;i
for(int j=0;j
cin>>road[i][j];
if(road[i][j]=='S'){
x = i;
y = j;
}
}
}
DFS(x,y);
if(out){
cout<
}else{
cout<
}
return 0;
}
運行結果:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的编程题走迷宫_C++程序算法题----迷宫(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机 运行新ie 命令,(新)计算机应
- 下一篇: vue mxgraph渲染xml页面_V