给一个 n 行 m 列的 2 维的迷宫,'S'
表示迷宫额起点,'T'
表示迷宫的终点,'#'
表示不能通过的点,'.'
表示可以通过的点。你需要从'S'
出发走到'T'
,每次只能上下左右走动,并且只能进入能通过的点,每个点只能通过一次。现在要求你求出有多少种通过迷宫的的方案。
输入格式
第一行输入 , (1≤n,m≤10) 表示迷宫大小
接下来输入 n 行字符串表示迷宫
输出格式
输入通过迷宫的方法数
样例输入1
2 3 S.# ..T
样例输出1
2
样例输入2
3 3 S.. .#. ..T
样例输出2
2
解题说明:
代码:
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int ans=0;
char room[15][15];
int mark[15][15];
int cgx[5]={0,1,-1,0,0};
int cgy[5]={0,0,0,-1,1};
void dfs(int x,int y){
if(room[x][y]==6){
ans++;
return;
}
mark[x][y]=1;
for(int i=1;i<=4;i++){
int xx=x+cgx[i];
int yy=y+cgy[i];
if(!mark[xx][yy]&&room[xx][yy]!=0)dfs(xx,yy);
}
mark[x][y]=0;
}
int main(){
int n,m;cin>>n>>m;
char ip1;int op2;
int beg,end;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>ip1;
if(ip1=='S'){
beg=i;end=j;
op2=5;
}
if(ip1=='T')op2=6;
if(ip1=='.')op2=1;
if(ip1=='#')op2=0;
room[i][j]=op2;
}
}
dfs(beg,end);
cout<<ans<<endl;
return 0;
}