HiTEL 게제동(GMA) 공개자료실

너비우선탐색 이용 최단거리 예제
작성자:한상진(라면)
98-07-01
첨 부:[2902]move.arj
안녕하세요. BFS(Breadth First Search:너비 우선 탐색)을 이용해 만든 최단거리 이동루틴의 예제입니다. 다른 이동 루틴에 비해 그다지 빠르거나 메모리를 적게 먹는것은 아니지만 한가지 좋은점이라면 정확한 최단거리라는 점입니다. ~~~~~~~~~~~~~~~ 즉, 한 타일 차이도 없이 제일 가까운 경로를 찾아내 줍니다. (a*과는 달리 오차가 없습니다.) path *move(x1,y1,x2,y2) 로 선언되어 있는데 x1과 y1는 현재의 좌표, x2,y2는 가고자 하는 좌표를 나타냅니다. path는 단순연결 리스트로서 data next data next data next ┌───┬─┐ ┌───┬─┐ ┌───┬─┐ │ UP │ ├─┤ RIGHT│ ├─┤ RIGHT│ ├─ NULL └───┴─┘ └───┴─┘ └───┴─┘ 이렇게 되어있습니다. UP,RIGHT,LEFT,DOWN은 방향인데 상수로 정의되어 있습니다. 소스는 예제 프로그램에 맞게 짜여져 있는데 조금만 보시고 고치시면 여러분의 소스에 응용하실수 있을것 같습니다. 이동루틴에 대해서 간단히 설명을 하자면 x2,y2에서 x1,y1로 queue를 이용한 너비 우선 탐색을 합니다. 그래 가지고 x1,y1에 도착하게 되면 이제 다시 이제까지 탐색했던것을 주워 담습니다. (활용하기 쉽게 연결리스트에 담습니다.) Q&A;게시판에 너비우선탐색에 대해서 질문하신 분이 계셨는데 이걸 받아서 참고하시면 좋을것 같아 만들었습니다. 최단거리 루틴이 필요하신 분은 받으세요. 그럼... 라면.