大佬求解为什么一直WA p1605 迷宫
  • 板块P1605 迷宫
  • 楼主liyiHuan
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/5/23 12:19
  • 上次更新2023/10/28 00:47:31
查看原帖
大佬求解为什么一直WA p1605 迷宫
586455
liyiHuan楼主2022/5/23 12:19
#include <bits/stdc++.h>
using namespace std;

const int N = 10;

int n, m, t, a, b;
int sti, stj, edi, edj, ti, tj;
int cnt = 0;
char tab[N][N];
int dx[4] = {-1, 0, 0 , 1}, dy[4] = {0, -1, 1, 0};

void dfs(int i, int j)
{
	if(i == edi && j == edj) // 找到 终点 
	{
		cnt ++;
		return; 
	}
	
	for (int k=0;k < 4;k ++)
	{
		// (a, b)是下一步 
		a = i + dx[k], b = j + dy[k];

		if(a <= n && a > 0 && b <= m && b > 0 && tab[a][b] != '1' && tab[a][b] != '2') // 下一步没有超过边界并且没有走过不是障碍 
		{
			tab[a][b] = '1';
			dfs(a, b);
			tab[a][b] = '0';
		}
	}
}

int main()
{
	cin >> n >> m >> t;
	cin >> sti >> stj >> edi >> edj;
	
	//  0 未访问 1 访问 -1 墙 
	memset(tab, '0', sizeof tab);
	
	while(t --)
	{
		cin >> ti >> tj;
		tab[ti][tj] = '2'; // 1 围墙 
	}
	
	tab[sti][stj] = '1'; // 起点标记走过 
	
	dfs(sti, stj);
	
	cout << cnt;
}
2022/5/23 12:19
加载中...