Titulo original:
http://oj.ecustacm.cn/problem.php?id=1317
Un laberinto de juegos en el Planeta X está construido en una pequeña ladera. Se compone de 10x10 pequeñas habitaciones comunicadas.
Hay una gran carta escrita en el suelo de la habitación. Suponemos que el jugador está parado mirando hacia arriba, entonces:
L significa ir a la habitación de la izquierda, R significa ir a la habitación de la derecha, U significa ir a la habitación cuesta arriba, D significa ir a la habitación cuesta abajo.
Los habitantes del Planeta X son un poco vagos y no quieren pensar mucho. Prefieren jugar a juegos de suerte. ¡Lo mismo es cierto para este juego!
Al principio, el helicóptero colocó a 100 jugadores en salas pequeñas. El jugador debe moverse de acuerdo con las letras en el suelo.
El mapa del laberinto es el siguiente:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
Por favor, y finalmente, por favor, ¿Muchos jugadores saldrán del Laberinto? En lugar de dar vueltas en círculos.
Salida
Salida de un número entero para indicar la respuesta
rápido
Para una fácil comprensión, consulte esta imagen.
https://blog.csdn.net/weixin_43914593/article/details/112132315
(1) Se puede contar directamente
(2) DFS [escritura recursiva]
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<set>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
const int maxn = 110000;
char map[15][15];
int ans=0;
int vis[15][15];
void dfs(int x,int y)
{
if(x<0||x>9||y<0||y>9)
{
ans++;
return;
}
if(vis[x][y]==0)
{
vis[x][y]=1;//!!!!!!!
if(map[x][y]=='L')
{
dfs(x,y-1);
}
if(map[x][y]=='R')
{
dfs(x,y+1);
}
if(map[x][y]=='U')
{
dfs(x-1,y);
}
if(map[x][y]=='D')
{
dfs(x+1,y);
}
return ;
}
return;
}
int main()
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
cin>>map[i][j];
}
}
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
memset(vis,0,sizeof(vis));
dfs(i,j);
}
}
cout<<ans;
return 0;
}