就是一个看起来没有问题的dfs,枚举方向,为什么过不了示例呢
#include <bits/stdc++.h>
//#include "zc2008.h"
//#include "readport.h"
using namespace std;
int mymap[6][6];
int tmp[6][6];
int n, m, t; //N为行,M为列,T为障碍总数
int sx, sy, fx, fy; //起点坐标SX, SY,终点坐标FX, FY
int tx, ty;
int ans;
int px[4] = {-1, 0, 0, +1};
int py[4] = {0, -1, +1, 0};
int dfs(int in_x, int in_y);
int main()
{
cin >> n >> m >> t;
cin >> sx >> sy >> fx >> fy;
for (int i = 0; i < t; i++)
{
cin >> tx >> ty;
tmp[tx][ty] = 1;
}
mymap[sx][sy] = 1;
dfs(sx, sy);
cout << ans << endl;
return 0;
}
int dfs(int in_x, int in_y)
{
if (in_x == fx && in_y == fy)
{
ans++;
return 0;
}
/*if (in_x>=0&&in_y>=0)
{
mymap[in_x-1][in_y] = -1;
dfs(in_x - 1, in_y);
mymap[in_x-1][in_y] = 0;
mymap[in_x+1][in_y] = -1;
dfs(in_x + 1, in_y);
mymap[in_x+1][in_y] = 0;
mymap[in_x][in_y-1] = -1;
dfs(in_x, in_y - 1);
mymap[in_x][in_y-1] = 0;
mymap[in_x][in_y+1] = -1;
dfs(in_x, in_y + 1);
mymap[in_x][in_y+1] = 0;
}*/
for (int i = 0; i < 3;i++){
if (mymap[in_x + px[i]][in_y + py[i]] == 0 && tmp[in_x + px[i]][in_y + py[i]] == 0)
{
mymap[in_x + px[i]][in_y + py[i]] = 1;
dfs(in_x + px[i], in_y + py[i]);
mymap[in_x + px[i]][in_y + py[i]] = 0;
}
}
return 0;
}