2013-03-26 2 views
0

나는이 "테스트"라고 말합니다.이 문제를 해결할 필요가 있지만 숙제가 아니라 테스트를 통과하기 위해 필요합니다.배열을 읽는 C 프로그램을 작성하십시오

내가해야 할 일을 이해할 수 없기 때문에 약간의 도움이 필요할 수 있습니다. 여기 알고리즘이 필요합니다! 그래서 다음과 같습니다 : 아래 표는 미로를 나타냅니다. "1"은 해당 값을 전달할 수 없음을 의미하고 "0"은 해당 값을 전달할 수 있음을 의미합니다. "T"는 달성 할 보물이고 "H"는 입구입니다. 좌표는 H (3.1), T (2.8)입니다.

-I 그 자체로 요소 [0,1]을 갖는 미로를 표현하고 또한 H, T 값을 읽는 행렬 A [1..M, 1.N]을 읽는 프로그램이 필요합니다.

1 1 1 1 1 1 1 1 1 1 
    1 1 0 0 0 1 0 T 0 1 
    H 0 0 1 1 1 0 1 1 1 
    1 1 0 0 0 0 0 0 0 1 
    1 1 1 1 1 1 1 1 1 1 
+1

당신은 무엇을 시도 했습니까? 가능한 모든 경로를 어떻게 열거합니까? 배열을 읽는 것이 아마도 가장 쉽습니다 ... 훌륭한 C 프로그래밍 책을 읽었습니까? 좋은 알고리즘 책을 읽었습니까? –

+0

안녕 Basile! 글쎄, 오케이 생각은 내가 매트릭스를 조금 다루는 방법을 알고 있지만 진보 된 방식은 아니다. 나는 누군가가 나에게 그것을 어떻게하는지에 대한 아이디어를 줄 수 있기를 바랬다. ! – pyetjegoo

+1

배열을 읽는 것으로이 문제를 분류하기에 다소 이상하게 보입니다. 우선 깊이를 찾는다/넓이를 먼저 찾는다/알고리즘을 찾기 위해 flood fill을 찾는다. M/N을 안다면'scanf'를 직접 사용하거나 숫자와 개행을 읽을 때 도움이되는이 게시물을 보아라. http : // stackoverflow .com/questions/15635686/c-read-from-stdin-enter-is-pressed-twice/15635911 # 15635911 –

답변

1

Wall Follower 접근 방식을 사용하여 존재하는 경우

그것은 다른 그가 매트릭스는 "보물 할 수있는 방법을"말 안, 보물하는 방법을 인쇄해야합니다. 보고있는 방향 (왼쪽, 오른쪽, 위, 아래)을 저장하는 변수가 있어야합니다. 그런 다음 벽에 부딪 칠 때까지 계속 그 방향으로갑니다. 벽에있을 때 계속 걷기 전까지 계속 좌회전합니다. 당신이 목표물에 올 때까지 이것을하십시오.

또는 의사 코드에

:

var walkingDirection = up; 
while (not at target) 
    if (next field in walkingDirection is not a wall) 
     go to next field in walkingDirection 
    else 
     turn right 
    end if 
end while 

이 그러나 단순히 연결되지 않은 미로 실패 (링크를 읽기)합니다.

좀 더 어려운 접근 방법은 A* algorithm 일 수 있습니다.

+0

이것은 좋아 보인다. 고마워 :) 벽은 "1"이되어야한다. 내가 확인해 볼께. – pyetjegoo

관련 문제