迷宫探索
迷宫探索
题目描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从入口走到出口的走法总数 。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从入口走到出口的走法总数 。
输入
第一行是两个整数n和m(1<=n,m<=10),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。
输出
输出从入口走到出口的走法总数
提示
解决
既然是关于迷宫的问题,那么,直接用dfs就能AC掉了。
代码
#include<bits/stdc++.h> using namespace std; int n,m,s1,s2,e1,e2,ans; char a[105][105]; bool b[105][105]; void dfs(int x,int y){ if(x<1||y<1||x>n||y>m||a[x][y]=='#'||b[x][y]){ return ; } if(x==e1&&y==e2){ ans++; return ; }//到终点时ans+1 b[x][y]=true; dfs(x+1,y); dfs(x,y+1); dfs(x-1,y); dfs(x,y-1); b[x][y]=false; } int main() { cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; if(a[i][j]=='S'){ s1=i; s2=j; }//得到起点 if(a[i][j]=='T'){ e1=i; e2=j; }//得到终点 } } dfs(s1,s2); cout<<ans; return 0; }