编程题走迷宫_C++程序算法题----迷宫(一)
題目:
一天蒜頭君掉進(jìn)了一個(gè)迷宮里面,蒜頭君想逃出去,可憐的蒜頭君連迷宮是否有能逃出去的路都不知道??丛谒忸^君這么可憐的份上,就請聰明的你告訴蒜頭君是否有可以逃出去的路。
輸入格式
第一行輸入兩個(gè)整數(shù) n和 m,表示這是一個(gè) n×m的迷宮。接下來的輸入一個(gè) n行 m列的迷宮。其中 'S' 表示蒜頭君的位置,'*'表示墻,蒜頭君無法通過,'.'表示路,蒜頭君可以通過'.'移動(dòng),'T'表示迷宮的出口(蒜頭君每次只能移動(dòng)到四個(gè)與他相鄰的位置——上,下,左,右)。
輸出格式
輸出一個(gè)字符串,如果蒜頭君可以逃出迷宮輸出"yes",否則輸出"no"。
數(shù)據(jù)范圍
1≤n,m≤10。
Sample Input
3 4
S**.
..*.
***T
Sample Output
no
Sample Input 2
3 4
S**.
....
***T
Sample Output 2
yes
運(yùn)用深度搜索。找到人的位置,因?yàn)橹荒軓纳舷伦笥宜膫€(gè)方向出發(fā),所以每到一個(gè)點(diǎn),先判斷是否是終點(diǎn),然后考慮這個(gè)點(diǎn)是否是在該棋盤上,是否能走,是否已經(jīng)走過。最后如果能出去,則輸出yes,否則輸出no。
代碼
#include
#include
#include
int n,m;
char road[15][15]; //棋盤
bool is_run[15][15]={false}; //是否已經(jīng)走過
int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; // 分別代表四個(gè)方向
bool out = false; //是否可以出去
using namespace std;
// 因?yàn)橐獜?個(gè)方向出發(fā),所以需要判斷下一個(gè)點(diǎn)是否在地圖里
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;
}
運(yùn)行結(jié)果:
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的编程题走迷宫_C++程序算法题----迷宫(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机 运行新ie 命令,(新)计算机应
- 下一篇: c++ so 反射_c++如何实现反射功