0
0
已采纳
深度优先搜索+记忆化搜索
bool search(int x,int y)
{
if(f[x][y]) return false;
if(x==x1&&y==y1)
{
if(a[x][y]=='s')return true;
return false;
}
if(x<1||x>n||y<1||y>n) return false;
if(b[x][y]) return false;
//cout<<b[x][y]<<' '<<x<<' '<<y<<endl;
if(a[x][y]=='d') return false;
b[x][y]=true;
if(search(x+1,y)) return true;
if(search(x-1,y)) return true;
if(search(x,y+1)) return true;
if(search(x,y-1)) return true;
b[x][y]=false;
f[x][y]=true;
return false;
}
0
flag[l][r]=true;
for (int i=0;i<4;i++)
{
int nextl=l+dir[i][0];
int nextr=r+dir[i][1];
if (nextl>=1 && nextl<=n && nextr>=1 && nextr<=n
&& !flag[nextl][nextr] && map[nextl][nextr]=='s')
search(nextl,nextr);
}
这题可以用搜索回溯
因为题目不要求输出所有路径,所以只要判断能不能到就可以了。只要搜索,不要回溯,否则超时
0
0
0
