我的回溯大概是没有问题的,但是只有一次输出()
  • 板块P1238 走迷宫
  • 楼主imfkwk
  • 当前回复3
  • 已保存回复3
  • 发布时间2020/12/13 18:57
  • 上次更新2023/11/5 06:09:49
查看原帖
我的回溯大概是没有问题的,但是只有一次输出()
389540
imfkwk楼主2020/12/13 18:57
#include <bits/stdc++.h>
using namespace std;
bool d[16][16];
bool f[16][16];
struct xy{
	int x;
	int y;
}b[1000005];
int fx[]={0,-1,0,1};
int fy[]={-1,0,1,0};
int tx,ty;
int sx,sy,ex,ey;
bool flag;
int m,n;
void sou(int x,int y,int j){
	if(x==ex&&y==ey){
		flag=1;
		for(int i=1;i<=j;i++){
			printf("(%d,%d)",b[i].x,b[i].y);
			if(i!=j)printf("->");
		}
		printf("\n");
		return;
	}
	
	for(int i=0;i<4;i++){
		tx=x+fx[i];
		ty=y+fy[i];
		if(tx<1||tx>m||ty<1||ty>n)continue;
		if(!d[tx][ty]||f[tx][ty])continue;
		
		f[tx][ty]=1;
		b[j+1].x=tx;
		b[j+1].y=ty;
		sou(tx,ty,j+1);
		f[tx][ty]=0;
	}
}
int main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++)
	cin>>d[i][j];
	cin>>sx>>sy>>ex>>ey;
	f[sx][sy]=1;
	b[1].x=sx;
	b[1].y=sy;
	sou(sx,sy,1);
	if(!flag)cout<<"-1";
	return 0;
}

tasukede

2020/12/13 18:57
加载中...