La Red de Conocimientos Pedagógicos - Currículum vitae - Cómo usar DFS para resolver el problema de escapar del laberinto en hdu acm 1728

Cómo usar DFS para resolver el problema de escapar del laberinto en hdu acm 1728

La idea de esta pregunta es encontrar el número mínimo de vueltas y luego compararlo con el número máximo de vueltas para obtener la respuesta. Para este tipo de número mínimo, generalmente es. BFS es más fácil de usar y resuelve algunos problemas de juicio cualitativo. Esta pregunta es difícil de resolver usando DFS. BFS se puede resolver fácilmente.

#include

#include

#include

usando el espacio de nombres std;

mapa de caracteres[102][102];

int visita[102][102];

int bx,by,ex,ey,step,N,M;

int XX[4][2]={{1,0},{-1,0},{0,1},{0,-1}};

estructura nodo{int x,y,step,dir;};

void bfs()

{

colaqu;

nodo t;

int k;

t.x=bx, t.y=by, t.step=0, t.dir=-1;

visitar[bx][by]=0;

qu.push(t) ;

mientras(!qu.empty())

{

t=qu.front();

qu.pop();

for(k=0;k<4;k++)

{

nodo tt=t;

tt.x+=XX[k][0], tt.y+=XX[k][1];

if(tt.x<1||tt.x>M||tt.y<1||tt.y>N||map[tt.x][tt.y]=='* ')

continuar;

if(tt.dir!=k&&tt.dir!=-1)tt.step++;

if(tt.step> paso)continuar;//!!!

if(tt.x==ex&&tt.y==ey)

{

cout<<"sí \n";return;

}

if(visita[tt.x][tt.y]>=tt.step)

{ tt. dir=k;

visita[tt.x][tt.y]=tt.step;

qu.push(tt);

}

}

}

cout<<"no\n";

return ;

}

int main()

{

int CASE,i,j;

cin>>CASE;

while(CASE--)

{

cin>>M>>N;//M filas N columnas

for(i=1;i< =M;i++)

for(j=1;j<=N;j++)

{

cin>>ma

p[i][j];

visitar[i][j]=999;

}

cin>>paso>>por>>bx >>ey>>ex;//x columna correspondiente

if(bx==ex&&by==ey)

{cout<<"yes\n"; /p>

bfs();

}

return0;

}