初学dfs,求dalao加回溯为什么错
  • 板块B3625 迷宫寻路
  • 楼主sll00
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/3/1 17:00
  • 上次更新2024/3/1 20:29:38
查看原帖
初学dfs,求dalao加回溯为什么错
1243869
sll00楼主2024/3/1 17:00

B3625 迷宫寻路

求助

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll maxn=1000;
ll bu[4][2]={{1,0},{-1,0},{0,1},{0-1}};
char arr[maxn][maxn];
int n, m,nx,ny,dx,dy,wall;
bool judge=false;
void dfs(int nx,int ny)
{
	if((nx<1||ny<1||nx>n||ny>m))
		return;
	if(nx==n&&ny==m)
	{
		judge=true;
		return;
	}
	if(judge)
		return;
	for(int i =0;i<4;i++)
	{
		if(arr[nx+bu[i][0]][ny+bu[i][1]]!='#')
		{
			arr[nx+bu[i][0]][ny+bu[i][1]]='#';
			dfs(nx+bu[i][0],ny+bu[i][1]);
              
                     
		//arr[nx+bu[i][0]][ny+bu[i][1]]='.';
		}
		
	}
	return;
}
int main()
{
	nx=1,ny=1;
	cin>>n>>m;
	dx=n,dy=m;
	for(int i =1;i<=n;i++)
	{
		for(int j =1;j<=m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='#')
				wall++;
		}
	}
	//事前剪枝
	if(n*m-wall-2<abs(dx-nx)+abs(dy-ny)-1)
		cout<<"No";
	else
	{
		arr[nx][ny]='#';
		dfs(nx,ny);
		if(judge)
			cout<<"Yes";
		else
			cout<<"No";
	}
	return 0;
}

在dfs中加了回溯操作,导致若干的样例TLE。

蒻蒻的问问为什么

2024/3/1 17:00
加载中...