(dfs)迷宫最小步数
生活随笔
收集整理的這篇文章主要介紹了
(dfs)迷宫最小步数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
題目:有一個n×mn × mn×m大小的迷宮,字符′S′'S'′S′表示起點,字符′T′'T'′T′表示終點, ′?′' * '′?′表示墻壁,字符 ′.′' . '′.′表示平地。求SSS到TTT的最少步數。
輸入:
3 4
S**.
…
***T
輸出:
5
思路:
第一個搜到的步數存入ans,如果當前步數大于ans,直接剪枝,否則更新ans
代碼:
#include <cstdio> #include <iostream> #include <string> using namespace std; int n,m; string maze[110]; bool vis[110][110]; int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}}; int ans=100000; bool in(int x,int y){return 0<=x&&x<n&&0<=y&&y<m; } void dfs(int x,int y,int step){if(step>=ans){return ;}if(maze[x][y]=='T'){ans=step;return ;}vis[x][y]=1;for(int i=0;i<4;++i){int tx=x+dir[i][0];int ty=y+dir[i][1];if(in(tx,ty)&&maze[tx][ty]!='*'&&!vis[tx][ty]){dfs(tx,ty,step+1);}}vis[x][y]=0; } int main() {cin>>n>>m;for(int i=0;i<n;++i){cin>>maze[i];}int x,y;for(int i=0;i<n;++i){for(int j=0;j<m;++j){if(maze[i][j]=='S'){x=i,y=j;}}}dfs(x,y,0);cout<<ans<<endl;return 0; }總結
以上是生活随笔為你收集整理的(dfs)迷宫最小步数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Altium Designer20原理图
- 下一篇: mysql 客户服务号_mysql客户端