35玄关,求调
  • 板块P1238 走迷宫
  • 楼主isop
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/26 20:41
  • 上次更新2024/7/26 22:17:35
查看原帖
35玄关,求调
1071516
isop楼主2024/7/26 20:41
#include<bits/stdc++.h>
using namespace std;

int m,n,sx,sy,fx,fy;//tem路径节点数
int g[17][17];
int dx[4]={-1,0,1,0};//方向数组
int dy[4]={0,1,0,-1};
bool flag=false;
vector<pair<int,int>>p;//存路径

inline void print(int w) {
	for (int i=0;i<w-1;i++) {
		cout<<"("<<p[i].first<<","<<p[i].second<< ")"<<"->";
	}
	cout<<"("<<fx<<","<<fy<<")"<<endl;
}

inline void dfs(int x, int y,int tem) {
	if (x == fx && y == fy) {
		flag = true;
		print(tem);
		return;
	}
	for (int i=0;i<4;i++) {
		int a=x+dx[i],b=y+dy[i];
		if (a<1 || a>m || b<1 || b>n) continue;//出界
		if (!g[a][b]) continue;//访问过
		
		g[a][b]=0;
		p.push_back({a,b});
		dfs(a,b,tem+1);
		g[a][b]=1;//回溯
		p.pop_back();
	}
}

int main() {
	cin>>m>>n;
	for (int i=1;i<=m;i++)
		for (int j=1;j<=n;j++) cin>>g[i][j];
	cin>>sx>>sy>>fx>>fy;
	g[sx][sy]=0;
	p.push_back({sx,sy});
	dfs(sx,sy,1);
	if (flag==false) printf("%d",-1);
}
2024/7/26 20:41
加载中...