迷宫问题(c++题解)
题目描述
设有一个 N*N(2<=N<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中 分别放 0 和 1,0 表示可通,1 表示不能,入口和出口处肯定是 0。迷宫走的规则如下所示: 即从某点开始,有八个方向可走,前进方格中数字为 0 时表示可通过,为 1 时表示不可通过, 要另找路径。找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总 数,如果无法到达,则输出 0。
输入格式
第一行:N 接下来是:N*N的迷宫
输出格式
输出路径总数,如果无法到达,则输出0。
样例
样例输入
复制3
0 0 0
0 1 1
1 0 0
样例输出
复制2
_____________________________________________________________________________
写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
_____________________________________________________________________________
#include<bits/stdc++.h>
using namespace std;
int n,ans;
int a[10005][10005];
int f[9][9]={{0,1},{1,0},{-1,0},{0,-1},{1,1},{1,-1},{-1,-1},{-1,1}};
void DFS(int x,int y){
if(x==1&&y==n){
ans++;
return ;
}
a[x][y]=true;
for(int i=0;i<8;i++){
int X=x+f[i][0],Y=y+f[i][1];
if(a[X][Y]==false&&X>0&&Y>0&&X<=n&&Y<=n){
DFS(X,Y);
}
}
a[x][y]=false;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
DFS(1,1);
cout<<ans;
}