【POJ - 1573】 로봇 모션 (DFS)

-> 로봇 모션

직접 중국어

설명 :

샘플 1

샘플 2

N * M은 첫 번째 행의 열로 로봇에서, 'N', 'S', 모든 영역의 영역을 가지고 'W', 'E'를, 단지 시간에 따른 영역에 갔다 다음 단계로 지정된 영역의 방향은, 당신은하지 않을 경우 영화 영역의 밖으로 로봇, 입력의 크기가 단계와 회전 수를 돌고 시작 여부를 부탁드립니다. 다음 동작 지시는 : 

N까지 
S 다운 
E 우측 
W 좌측 

예를 들면, 로봇 (1) 격자 노스 (위) 측, 남쪽 (아래)에서 시작한다는 가정에서 출발. 경로는도 1에 도시 한 로봇 하였다. 그리드를 떠나기 전에, 로봇 (10)는 격자에 명령을 실행합니다. 

2의 경우 그리드의 비교 : 오직 다음 세 가지 지침 및하여 로봇 팔의 지시에 의해주기를 시작하고, 종료하지 마십시오. 

당신은 떠나거나주기를 메쉬하는 방법을 로봇에 필요한 시간 할 수있는 로봇을 결정하는 프로그램을 작성합니다. 

입력

첫 번째 행은 공백으로 구분 세의 정수이다 : 그리드의 행수는, 그리드의 열의 수와 컬럼의 수는 북쪽에서 로봇 들어간다. 다음 명령어 행 방향. 각 그리드는 최대 10 행과 몇 가지 지침에 적어도 하나 개의 행을해야합니다. 커맨드 라인은 공백없이 문자 만 N, S, E 또는 W를 포함한다. 라인이 000를 포함하여 입력의 끝 표시됩니다.

산출

출력의 각 입력 라인. 로봇은 네면의에 질서와 출구 그리드의 일정 금액, 숫자의 위치에있는 지침을 따른 다음, 명령 특정 위치의 지시를 반복하는 다른 로봇을 따릅니다. 다음의 예는 위의 두 입력 메시에 대응하고, 출력의 두 가지 형태를 나타낸다. 다음에 단어 "단계", "(S)"다음에 관계없이, 후자도 1 여부.

샘플 입력

3 6 5 
NEESWE 
WWWESS 
SNWWWW 
4 5 1 
SESWE 
EESNW 
NWEEN 
EWSEN 
0 0 0

샘플 출력

10 단계 (들)을 종료하는 
8 단계를 반복하기 전에 3 단계 (들) (S)

주제 링크

https://vjudge.net/problem/POJ-1573

 

아무것도 DFS가 줄에 직접 검색 할 말 없습니다

 

AC 코드

사용법 #include <iostream> 
#INCLUDE <cstdio> 
#INCLUDE <fstream> 
#INCLUDE <알고리즘> 
#INCLUDE <cmath> 
#INCLUDE <양단> 
#INCLUDE <벡터> 
#INCLUDE <큐> 
#INCLUDE < 문자열 > 
#INCLUDE <CString을> 
#INCLUDE <지도> 
#INCLUDE <적층> 
#INCLUDE < 설정 > 
#INCLUDE <sstream>
#DEFINE의 모드 1000000007
 #DEFINE EPS 1E-6
 #DEFINE 어떠냐 오래 오래
 #DEFINE의 INF의 0x3f3f3f3f
#DEFINE MEM (X, Y)가 memset (X, Y, sizeof의 (X))
 #DEFINE MAXN 25
 은 USING  스페이스 STD를,
 INT의 R & LT, C, S, // 첫 번째 행의부터 행, 열, 
문자 MP를 [MAXN] [MAXN]; // 지도 
INT VIS [MAXN] MAXN]; // 태그 인 전달 
의 INT [MAXN] MAXN 단계; // (X, Y)은 제 1 단락이다 

// (X, Y)에 따라 문자 플래그 (X, Y)의 첫 번째 단계는 단계를 갖는다 단계 
공극 DFS ( INT의 X, int로 Y,  , OP을 int로 시작) 
{ 
    // 미로에서 
    IF (MP [X] [Y] == ' X- ' | | X <1 && Y < 1 && x> R && Y> c) 
        COUT << << 시작 " 단계 (들)이 종료 " << ENDL;
    // (x, y)를没走过
    다른  경우 (! 힘 [X] [Y]) 
    { 
        힘 [X] [Y] = 1 ; 
        [X] [Y]를 단계 = 시작 + 1 ;
        // 四种走法
        경우 (OP == ' N ' )
             복귀 DFS (X- 1 , Y, MP [X- 1 ] [Y], 공정 [X] [Y]);
        경우 (OP == ')
             반환 DFS를 (X + 1 , Y, MP [X + 1 ] [Y], 공정 [X] [Y]);
        경우 (OP == ' E ' )
             복귀 DFS (X, Y + 1 , MP [X] [Y + 1 ], 공정 [X] [Y]);
        경우 (OP == ' W ' )
             복귀 DFS (X, Y- 1 , MP [X] [Y- 1 ], 공정 [X] [Y]); 
    } 
    // (x, y)를走过,输出即可
    다른  경우 (힘) 
        COUT << 공정 [X] [Y] - 1 << " 의 루프 전에 단계 (들) "<< 시작 + 1 - 스텝 [X] [Y] << " 단계 (들) " << ENDL 단계; 
} 
INT 의 main () 
{ 
    동안 (CIN R >> >> >> S C, C +, R + S) 
    { 
        // 初始化 
        MEM (MP, ' X ' ); 
        MEM (마주, 0 ); 
        MEM (단계, 0 );
        위한 ( int로 I = 1 ; I <= R; I ++ )
              ( INT J = 1 ; J <= C, J ++ ) 
                CIN >> MP [I] [J]을;
        단계 [1 ] [S] = 0 ; 
        DFS ( 1 , S, MP [ 1 ] [S], 단계 [ 1 ] [S]); 
    } 
}

 

추천

출처www.cnblogs.com/sky-stars/p/11204430.html