Problema de laberinto DFS y DFS

Un día, la cabeza de ajo cayó en un laberinto. La cabeza de ajo quería escapar. La cabeza de ajo pobre ni siquiera sabía si el laberinto podía escapar.

Para una parte tan lamentable de la cabeza de ajo, sea inteligente, dígale a la cabeza de ajo si hay una salida.

Formato de entrada

Ingrese dos enteros n y  m en la primera línea , lo que indica que este es un  laberinto de n × m.

La siguiente entrada es un  laberinto con n filas  ym columnas. Entre ellos  'S' , la posición de la cabeza de ajo Jun, la '*'pared, la cabeza de ajo Jun no puede pasar, el '.'camino, la cabeza de ajo Jun puede '.'moverse y 'T'la salida del laberinto (la cabeza de ajo Jun solo puede moverse a cuatro posiciones adyacentes arriba y abajo , Izquierda, derecha).

Formato de salida

Salida de una cadena, si la cabeza de ajo puede escapar de la salida del laberinto "yes", de lo contrario salida "no".

Rango de datos

1 n , m 1 0。

El espacio extra al final de cada línea cuando sale, no afecta la exactitud de la respuesta.

Entrada de muestra

3 4 
S **. 
.. *. 
*** T

Salida de muestra

No

Entrada de muestra

3 4 
S **. 
.... 
*** T

Salida de muestra

si
1 #include <iostream>
 2  usando el  espacio de nombres estándar;
3  int n, m, beginx, beginy;
4  bool mark [ 11 ] [ 11 ] = { false };
5  Char mapa [ 11 ] [ 11 ];
6  int x [ 4 ] = { 0 , - 1 , 1 , 0 }, y [ 4 ] = {- 1 , 0 , 0 , 1 };
7  bandera de bool = falso;
8  bool check ( int r, int c) {
 9      if (r> = 0 && r <n && c> = 0 && c < m)
 10          return  true ;
11      devuelve  falso ;    
12  }
 13  nulo DFS ( int r, int c) {
 14  
15      int newx, newy;
16      para ( int   i = 0 ; i < 4 ; i ++ )
 17      {
 18         newx = r + x [i];
19          newy = c + y [i];
20          if (marque (newx, newy) &&! Mark [newx] [newy])
 21          {
 22              mark [newx] [newy] = verdadero ;
23              if (map [newx] [newy] == ' T ' )
 24              {
 25                  flag = true ;
26                  cout << " " << endl;
27                  regreso ;
28              }
 29              si(map [newx] [newy] == ' . ' )
 30              {
 31                  mark [newx] [newy] = verdadero ;
32                  DFS (newx, newy);
33                  // cout << "newx =" << newx << "newy =" << newy << endl; 
34              }
 35          }
 36      }
 37  }
 38  int main () {
 39      cin >> n >> m;
40      para ( int i = 0 ; i <n; i ++ )
 41      {
 42          cin>mapa [i];
43          para ( int j = 0 ; j <m; j ++ )
 44          {
 45              if (mapa [i] [j] == ' S ' )
 46              {
 47                  beginx = i;
48                  beginy = j;
49              }
 50          }
 51      }
 52      puntos [beginx] [beginy];
53      DFS (beginx, beginy);
54      if (! Flag)
 55      {
 56          cout <<" no " << endl;
57      }
 58      
59 }

 

Supongo que te gusta

Origin www.cnblogs.com/BlairGrowing/p/12723687.html
Recomendado
Clasificación