题目:
代码:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int x1, y11, x2, y2, n, m, nb, sum, x, y;//sum代表方案数目
typedef pair<int, int>PII;
int g[6][6];
bool st[6][6];
void dfs(int x3, int y3)
{
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
if (x3 == x2 && y3 == y2)
{
sum++;
return;
}
for (int i = 0; i < 4; i++)
{
x = x3 + dx[i];
y = y3 + dy[i];
if (x >= 1 && x <= n && y >= 1 && y <= m && g[x][y] != 1 && !st[x][y])
//表示没超界,无障碍,没走过
{
st[x3][y3] = true;//走过了
dfs(x, y);//递归
st[x3][y3] = false;//回溯
}
}
}
int main()
{
cin >> n >> m >> nb >> x1 >> y11 >> x2 >> y2;//输入
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
g[i][j] = 2;//先用'2'来重置一下地图情况
while (nb--)//障碍个数
{
int a, b;
cin >> a >> b;
g[a][b] = 1;//用"1"来代表障碍
}
dfs(x1, y11);//从起点开始搜索,因为x1用不了,所以用的x11,hhh
cout << sum;
return 0;
}