求助
#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。
蒻蒻的问问为什么