luckoo1   5년 전

예제는 다 맞습니다... 틀린예가 있을거같은데 계속 해매고있습니다..

도와주십시오...

제가 생각한 알고리즘

1.물이 차는 루트 BFS구현

2. 고슴도치가 이동하기전에 물이 차는 루트에서 물이 한칸 이동한곳 즉 배열값이 1인곳에 체크배열에 true처리해서 1로 못가게합니다.

3. 그다음에는 고슴도치가 2로 이동못하게 체크배열에 true처리합니다.

이런식으로 했습니다. 고수님들 도와주세요...

seico75   5년 전

이미 문제는 푸신 것으로 알고 있지만, 이 코드의 문제에 대해서 아직도 고민을 하실까봐 글을 남깁니다.

제가 보기에는 74~81 라인이 매번 큐에서 꺼낼때 마다 도는 것이 문제로 보입니다.

taboo += 1; 이것은 고슴도치가 한번 움직일때 마다 돌아야 하는데, 처음에는 초기위치 하나가 들어가 있지만, 

두번째 턴에는 최대 4가지 가능성이 들어가 있고 세번째 턴에는 최대 16가지 가능성이 들어갈 수 있으니

실제로는 탈출할 수 있어도 이 코드에서는 나갈 수 없다고 할 수 있을 것 같습니다.

보통은 이런 경우

while( !q.empty())

{

    int end = q.size();

    ....

    taboo++;

    for( int i = 0; i < end; i++

    { q.pop(); .... }

}

이렇게 다시 돌때 q 크기를 알아서 그 만큼만 돌면 그게 한 턴이니까 처리하고 또 돌고... 이렇게 많이들 하시는 것 같습니다.

혹은 턴이 끝났다는 메세지는 q에 넣는 것도 봤던 것 같습니다.


luckoo1   5년 전

감사합니다... 제가 부족했네요!! 

댓글을 작성하려면 로그인해야 합니다.