答案错误,有一半是对的,能帮我看看吗?最好能在原有代码上做出修改,必采纳!
#include <iostream>
using namespace std;
int a[10000][105], v[10000][105]; //访问数组v[],1为已经访问过,0为未访问; //地图数组a[],1时为空地,2时为障碍物
//dx,dy为方向输组
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
int n, m, t, sx, sy, fx, fy,cnt = 0;
void dfs(int x, int y)
{
if (x == fx && y == fy) //到达终点
{
cnt++; //次数加一
v[x][y] = 0; //终点设置为未访问,其他位置回溯时候,由于只能访问一次,就不设置为未访问了
v[sx][sy] = 0; //起点也设置为未访问
return;
}
for (int i = 0; i < 4; ++i) //没有到达终点,就往四个方向继续做试探(默认为:右下左上)
{
int tx, ty; //四个方向试探的辅助变量
tx = x + dx[i];
ty = y + dy[i];
if (a[tx][ty] == 1 && v[tx][ty] == 0) //空地且未访问
{
v[tx][ty] = 1; //设置为已经访问
dfs(tx,ty); //这里的下面不设置返回时遇到的方格为0了,因为每个方格只能访问一次
}
}
}
int main()
{
cin >> n >> m >> t;
for (int i = 1; i <= n; ++i) //初始化a数组全为1
{
for (int j = 1; j <= m; ++j)
{
a[i][j] = 1;
}
}
cin >> sx >> sy >> fx >> fy; //输入起点和终点坐标
if (sx == fx && sy == fy) //终点和起点相同,直接输出0
{
cout << 0;
return 0;
}
for (int k = 1; k <= t; ++k) //设置障碍物
{
int t1, t2;
cin >> t1 >> t2;
a[t1][t2] = 2; //障碍物设置为2
}
v[sx][sy] = 1; //将起点设置为已经访问
dfs(sx, sy); //递归搜索
cout << cnt;
return 0;
}