这是80分的代码
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, sx, sy, fx, fy, t, cnt, dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
bool sign[6][6], mapp[6][6]; // sign存障碍,mapp存是否走过
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
cnt++;
return;
}
else
{
for (int i = 0; i < 4; i ++)
{
if (sign[x + dx[i]][y + dy[i]] && !mapp[x + dx[i]][y + dy[i]]) // 没有障碍,并且没走过
{
mapp[x][y] = 1;
dfs(x + dx[i], y + dy[i]);
mapp[x][y] = 0;
}
}
}
}
int main()
{
scanf("%d%d%d%d%d%d%d", &n, &m, &t, &sx, &sy, &fx, &fy);
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
sign[i][j] = 1;
while (t --)
{
int l, r;
scanf("%d%d", &l, &r);
sign[l][r] = 0;
}
dfs(sx, sy);
printf("%d\n", cnt);
return 0;
}
把mapp数组变为int类型,ac了。。。
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, sx, sy, fx, fy, t, cnt, mapp[6][6], dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
bool sign[6][6]; // sign存障碍,mapp存是否走过
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
cnt++;
return;
}
else
{
for (int i = 0; i < 4; i ++)
{
if (sign[x + dx[i]][y + dy[i]] && !mapp[x + dx[i]][y + dy[i]]) // 没有障碍,并且没走过
{
mapp[x][y] = 1;
dfs(x + dx[i], y + dy[i]);
mapp[x][y] = 0;
}
}
}
}
int main()
{
scanf("%d%d%d%d%d%d%d", &n, &m, &t, &sx, &sy, &fx, &fy);
for (int i = 1; i <= n; i ++)
for (int j = 1; j <= m; j ++)
sign[i][j] = 1;
while (t --)
{
int l, r;
scanf("%d%d", &l, &r);
sign[l][r] = 0;
}
dfs(sx, sy);
printf("%d\n", cnt);
return 0;
}
其余代码均不变。为什么会这样啊?大半夜看这两个代码都要掉头发了呜呜呜