求条P2802(玄关)
  • 板块学术版
  • 楼主Ethan_tang
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/6/27 21:19
  • 上次更新2025/6/28 17:06:16
查看原帖
求条P2802(玄关)
1491661
Ethan_tang楼主2025/6/27 21:19

P2802

#include <bits/stdc++.h>
using namespace std;
int n,m,nmap[14][14],sx,sy,ans = 1e9,dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0};
bool vis[14][14][7];
void dfs(int x,int y,int h,int t)
{
	if (h <= 0)
	{
		return ;
	}
	vis[x][y][h] = 1;
	if (nmap[x][y] == 3)
	{
		ans = min(ans,t);
		vis[x][y][h] = 0;
		return ;
	}
	if (nmap[x][y] == 4)
	{
		h = 6;
	}
	for (int i = 0;i < 4;i++)
	{
		int gx = x + dx[i],gy = y + dy[i];
		if (gx > 0 && gx <= n && gy > 0 && gy <= m && !vis[gx][gy][h - 1] && nmap[gx][gy])
		{
			dfs(gx,gy,h - 1,t + 1);
		}
	}
	vis[x][y][h] = 0;
	
}
int main()
{
	cin >> n >> m;
	for (int i = 1;i <= n;i++)
	{
		for (int j = 1;j <= m;j++)
		{
			cin >> nmap[i][j];
			if (nmap[i][j] == 2)
			{
				sx = i;
				sy = j;
			}
		}
	}
	dfs(sx,sy,6,0);
	cout << (ans == 1e9?-1:ans);
	return 0;
}
2025/6/27 21:19
加载中...