Blue Bridge Cup Daily One Pregunta 1.3 2017 Competencia provincial Grupo A 1. Maze [DFS]

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;
}

 

Supongo que te gusta

Origin blog.csdn.net/qq_43660826/article/details/112978054
Recomendado
Clasificación