走迷宮(深度優先搜尋)
阿新 • • 發佈:2019-02-15
給一個
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; }