DFS 里面没用方向数组,一个一个方向判断的
a,b,c,d 为起点和终点的坐标
mg 数组是迷宫,0 是能走的,1 是障碍/已经走过的
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,t,a,b,c,d,x,y,ans;
int mg[10][10];
void dfs(int i,int j){
if(i+1<=n&&mg[i+1][j]!=1){
if(i+1==c&&j==d)ans++;
else{
mg[i++][j]=1;
dfs(i,j);
mg[--i][j]=0;
}
}
if(j+1<=m&&mg[i][j+1]!=1){
if(i==c&&j+1==d)ans++;
else{
mg[i][j++]=1;
dfs(i,j);
mg[i][--j]=0;
}
}
if(i-1>=1&&mg[i-1][j]!=1){
if(i-1==c&&j==d)ans++;
else{
mg[i--][j]=1;
dfs(i,j);
mg[++i][j]=0;
}
}
if(j-1>=m&&mg[i][j-1]!=1){
if(i==c&&j-1==d)ans++;
else{
mg[i][j--]=1;
dfs(i,j);
mg[i][++j]=0;
}
}
}
int main(){
cin>>n>>m>>t;
cin>>a>>b>>c>>d;
for(int i=1;i<=t;i++){
cin>>x>>y;
mg[x][y]=1;
}
dfs(a,b);
cout<<ans;
return 0;
}
附上下载的数据#2:
输入
5 5 5
1 2 5 5
2 1
2 2
2 3
2 4
3 4
正确输出 10,这个代码输出 1