로봇 모션 (DFS)

문제 설명


로봇이 해당 경로의 지침을 따르도록 프로그램되어 있습니다. 로봇이 이동하는 것입니다 다음 방향에 대한 지침은 그리드에 규정되어있다. 가능한 지침은 

(페이지까지) 북쪽 N을
(페이지 아래로) 남쪽 S
E 동쪽 (페이지 오른쪽)
합니다 (페이지에 왼쪽) 서쪽 (W)

예를 들어, (위 로봇이 북쪽에서 시작한다고 가정 (아래 남쪽 그리드 1과 시작의) 측). 로봇은 다음의 경로가 도시되어있다. 로봇은 그리드를 떠나기 전에 그리드에서 10 개 지침에 간다.

로봇이 한 번만 3 개 지침을 통과하고 8 개 명령을 통해 루프를 시작하고, 종료 결코 : 그리드 2에서 무슨 일 비교.

당신은 로봇이 주변에 루프 방법 그리드 또는에서 얻을 수있는 로봇을 걸리는 시간을 알아내는 프로그램을 작성해야한다.
 

 

입력
로봇이 탐색하는 하나 이상의 그리드있을 것입니다. 각각의 데이터는 다음과 같은 형태이다. 첫째 줄의 공백으로 분리 세 정수이다 : 그리드의 행수, 격자의 열 수, 로봇이 북쪽으로부터 입사되는 칼럼의 수. 가능한 항목 열은 왼쪽에 하나의로 시작하는 번호가 매겨집니다. 그런 방향 지침의 행을 온다. 각 그리드는 적어도 하나의 대부분의 10 행과 지침의 컬럼에있을 것이다. 명령어의 선은 문자 N, S, E, 또는 전혀 공백 W를 함유한다. 입력의 끝은 0 0 0을 포함하는 로우로 표시된다.
 

 

산출
입력의 각 계통의 출력 라인 중 하나가있다. 어느 로봇이 지침의 특정 번호를 다음과 어느 하나에 그리드를 종료 네 측면이나 다른 로봇이 다음 번 위치의 특정 번호에 대한 지침, 반복 위치에의 수에 대한 지침을 따른다. 입력 샘플은 다음과 상기 두 개의 격자에 대응하고, 출력의 두 가지 형태를 나타낸다. 이 일 전에 단어 "단계"항상 즉시 "(들)"여부 뒤에 숫자입니다.
 

 

샘플 입력
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0
 

 

샘플 출력
단계 10은 단계 8의 반복 전에 (3) 단계 (들)을 종료 (S)

 

이 질문은 링의 경우에 주목하기 시작했다. 그래서 우리는 배열대로 힘 초기화 할 수 없습니다 나는이 구덩이에서 생각 0

 

1 1 1 
S 
2 1 1 
S 
N 
1 2 1 
EW 
答案: 
1의 단계 (들)을 종료하는 
2 단계 (S)의 루프 전에 0 단계 (들) 
(2) 단계를 반복하기 전에 0 단계 (들) (S)

1 #INCLUDE <iostream>
 2 #INCLUDE <알고리즘>
 3 #INCLUDE <stdlib.h>
 4 #INCLUDE < 문자열 >
 5 #INCLUDE < 문자열 .H>
 6 #INCLUDE < 설정 >
 7 #INCLUDE <큐>
 8 #INCLUDE < math.h>
 9 #INCLUDE <stdbool.h>
 10  
11  #DEFINE는 LL 긴 길이
 12  #DEFINE의 0x3f3f3f3f INF
 13  이용한  스페이스 성병;
14  CONST의  INT의 MAXN = 1,000,005 ;
(15)  
(16) int로 N, M, K;
17   맵 [ 15 ] [ 15 ];
18  INT 힘 [ 15 ] [ 15 ];
19  INT의 플래그 = 0 ;
20  
21  공극 DFS ( INT의의 INT (COL), INT의 공정)
 22  {
 23 일      경우 (플래그) ;
24      의 경우 (행 < 0 || COL < 0 || 행> = N || COL> = m)
 25      {
 26          의 printf ( "%의 (D) 단계 (S) \ n을 종료하는 " 단계)
 27          플래그 = 1 ;
 28          ;
 29      }
 30      하다면 ! (힘 [행] [COL = - 1 )
 31      {
 32          의 printf ( " % d의 공정 ( %의 (D) 단계 (S) \ n의 루프 전에들) " , 힘 [행] [COL, 스텝 - 힘 [행] [COL]);
 (33)          ,
 34      }
 35      힘 [행] [COL = 공정 ,
 (36)      의 경우 (맵 [행] [COL] == ' S ' )
 37          행 ++;
(38)      그 밖의  경우 (맵 [행] [COL] == ' E ' )
 39          COL ++ ;
(40)      그 밖의  경우 (맵 [행] [COL] == ' N ' )
 41          row-- ;
(42)      그 밖의  경우 (맵 [행] [COL] == ' W ' )
 43          col-- ;
44      DFS (행 COL 단계 + 1 );
45  }
 46  
47  
48  INT의 주 ()
 49  {
 50 #ifndef ONLINE_JUDGE
 51      freopen을 ( " ../in.txt " , " R " , 표준 입력);
52  #endif 다음 
53      동안 (~는 scanf ( " %의 D % d에 " , N, m)) {
 54          memset 함수 (힘 - 1 , 를 sizeof (힘));
55          플래그 = 0 ;
(56)          의 경우 (N 개의 == 0 && m의 == 0 )
 57              체류 ;
58          는 scanf ( " %의 D ' , K);
         위한 ( int로 I = 0 ; I <N이 나 ++ )
 60          {
 61               ( INT의 J = 0 ; J <m, J ++ )
 62                  CIN >> 맵 [I] [J]을;
63          }
 64          DFS ( 0 , K- 1 , 0 );
65      }
 66      반환  0 ;
67  
(68) }

 

추천

출처www.cnblogs.com/-Ackerman/p/11221130.html