迷宫探索

迷宫探索

题目描述

当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从入口走到出口的走法总数 。

输入

第一行是两个整数n和m(1<=n,m<=10),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。

输出

输出从入口走到出口的走法总数

样例

输入1 
3 3
S#T
.#.
...
输出1
1

输入2  
3 3
S#T
...
...
输出2  
4

提示

解决
既然是关于迷宫的问题,那么,直接用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;
}

 

posted @ 2022-07-26 21:01  ciciio  阅读(73)  评论(0编辑  收藏  举报