也是dfs, 但是注意障碍位置要用另一个二维数组记录,不能全用st数组记录,然后就是合法条件要写全,尤其是位置坐标要大于等于的是(1,1),小于等于的是(N,M),而不是起点终点。
#include<iostream>
using namespace std;
const int n=10;
int N, M, T, cnt=0;
int SX, SY, FX, FY;
int g[n][n];
bool st[n][n];
void dfs(int x, int y)
{
if(x==FX && y==FY)
{
cnt++;
return;
}
int dx[4]={-1, 0, 1, 0}, dy[4]={0, 1, 0, -1};
for(int i=0; i<4; i++)
{
int nx=x+dx[i], ny=y+dy[i];
if(!st[nx][ny] && !g[nx][ny] && nx>=1 && nx<=N && ny>=1 && ny<=M)
{
st[nx][ny]=1;
dfs(nx, ny);
st[nx][ny]=0;
}
}
}
int main()
{
int a, b;
cin >> N >> M >> T;
cin >> SX >> SY >>FX >> FY;
st[SX][SY]=1;
for(int i=1; i<=T; i++)
{
cin >> a >> b;
g[a][b]=1;
}
dfs(SX, SY);
cout << cnt;
return 0;
}