80分WA,求指教
  • 板块P1605 迷宫
  • 楼主OoJacksonoO
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/3/8 00:18
  • 上次更新2024/3/8 16:00:36
查看原帖
80分WA,求指教
1217265
OoJacksonoO楼主2024/3/8 00:18

这是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;
}

其余代码均不变。为什么会这样啊?大半夜看这两个代码都要掉头发了呜呜呜

2024/3/8 00:18
加载中...