走出迷宫(信息学奥赛一本通-T1254)
生活随笔
收集整理的這篇文章主要介紹了
走出迷宫(信息学奥赛一本通-T1254)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目描述】
當(dāng)你站在一個(gè)迷宮里的時(shí)候,往往會(huì)被錯(cuò)綜復(fù)雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會(huì)變得非常簡(jiǎn)單。
假設(shè)你已經(jīng)得到了一個(gè)n*m的迷宮的圖紙,請(qǐng)你找出從起點(diǎn)到出口的最短路。
【輸入】
第一行是兩個(gè)整數(shù)n和m(1≤n,m≤100),表示迷宮的行數(shù)和列數(shù)。
接下來n行,每行一個(gè)長(zhǎng)為m的字符串,表示整個(gè)迷宮的布局。字符‘.’表示空地,‘#’表示墻,‘S’表示起點(diǎn),‘T’表示出口。
【輸出】
輸出從起點(diǎn)到出口最少需要走的步數(shù)。
【輸入樣例】
3 3
S#T
.#.
...
【輸出樣例】
6
【源程序】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 101 #define MOD 2520 #define E 1e-12 using namespace std; int r,c; char a[N][N]; bool vis[N][N]; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; struct node {int x;int y;int step; }q[N*100]; void bfs(int sx,int sy,int ex,int ey) {int head=1,tail=1;memset(vis,0,sizeof(vis));vis[sx][sy]=1;q[tail].x=sx;q[tail].y=sy;q[tail].step=0;tail++;while(head<tail){int x=q[head].x;int y=q[head].y;int step=q[head].step;if(x==ex&&y==ey){printf("%d\n",step);break;}for(int i=0;i<4;i++){int nx=x+dir[i][0];int ny=y+dir[i][1];if(nx>=0&&nx<r&&ny>=0&&ny<c&&vis[nx][ny]==0&&a[nx][ny]=='.'){vis[nx][ny]=1;q[tail].x=nx;q[tail].y=ny;q[tail].step=step+1;tail++;}}head++;} } int main() {int start_x,start_y,end_x,end_y;scanf("%d%d",&r,&c);for(int i=0;i<r;i++)scanf("%s",a[i]);for(int i=0;i<r;i++)for(int j=0;j<c;j++){if(a[i][j]=='S'){start_x=i;start_y=j;}if(a[i][j]=='T'){end_x=i;end_y=j;a[i][j]='.';}}bfs(start_x,start_y,end_x,end_y);return 0; }?
總結(jié)
以上是生活随笔為你收集整理的走出迷宫(信息学奥赛一本通-T1254)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 搜索文件
- 下一篇: 钥匙计数之一(HDU-1483)