60分求助!
  • 板块P1238 走迷宫
  • 楼主_5555_
  • 当前回复16
  • 已保存回复16
  • 发布时间2022/4/30 13:07
  • 上次更新2023/10/28 02:36:00
查看原帖
60分求助!
722330
_5555_楼主2022/4/30 13:07
#include<bits/stdc++.h>
#define N 100010

using namespace std;

typedef long long ll;

int a[20][20],z[100][5],f[20][20],hx,hy,dx[]={0,-1,0,1},dy[]={-1,0,1,0},n,m,l=0;
bool flag = false;

void dfs(int x,int y,int l)
{
	if (x==hx && y==hy)
	{
		for (int i=0;i<l;i++)
			cout << "(" << z[i][1] << "," << z[i][2] << ")" << "->";
		cout << "(" << z[l][1] << "," << z[l][2] << ")" << endl;
		flag = true;
		return ;
	}
	for (int i=0;i<4;i++)
	{
		int xx = x+dx[i],yy = y+dy[i];
		if (a[xx][yy]==1 && xx<=n && yy<=m && f[xx][yy])
		{
			f[xx][yy] = false;
			z[++l][1] = xx,z[l][2] = yy;
			dfs(xx,yy,l);
			f[xx][yy] = true;
			l--;
		}
	}
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
	cin >> n >> m;
	for (int i=1;i<=n;i++)
		for (int j=1;j<=m;j++)
			cin >> a[i][j];
	int x,y;
	cin >> x >> y >> hx >> hy;
	z[0][1] = x,z[0][2] = y;
	memset(f,true,sizeof(f));
	dfs(x,y,0);
	if (!flag) cout << -1 << endl;
	return 0;
}
2022/4/30 13:07
加载中...