2011-05-02 2 views
1

emu8086을 사용하여 어셈블리 프로그램을 만들고 있습니다. 이 프로그램은 내장 된 로봇 장치를 사용하여 시뮬레이션 된 6x9 맵에서 가상 로봇을 에뮬레이션합니다. 지도에는 알 수없는 양의 벽과 램프 (점등/점등되지 않음)가 포함되어 있으며 로봇은지도를 통과하여 조명이없는 모든 램프를 배치하고 점등해야합니다. 로봇 자체는 로봇이 향하고있는 인접 사각형의 데이터 만 가져올 수 있으며 90도 회전 만 가능합니다. 프로젝트는 왼쪽 상단 구석이 좌표계 (0,0)의 원점이라고 제안합니다. 어셈블리에서 로봇 탐사 관련 문제 (emu8086)

http://www.emu8086.com/assembler_tutorial/robot.gif

나는 그러나, 나는 효율적 통해 여행 떨어지지 않고, 전체지도에 모든 램프를 확인하는 방법을 잘 모르겠어요, 이동 및 데이터를 검사하려면 코드로 로봇을 인터페이스하는 방법을 이해 무한 루프 또는 막 다른 골목으로.

광범위 우선 및 깊이 우선 검색 알고리즘과 같은 여러 검색 알고리즘을 사용하고 있지만 어셈블리에서 이러한 개념을 구현하는 방법을 잘 모르겠습니다. 대부분의 예제/psuedocode는 C++로 작성되었습니다./C#/etc).

특정 코딩은 요구하지 않지만 이러한 검색 기능 구현 방법에 대한 통찰력은 있습니다. 문제는 좌표계의 원점을 언급하기 때문에 특정 좌표의 객체에 대한 값을 취하는 2 차원 배열을 만들었습니다. 배열이 문제에 얼마나 중요한지는 모르지만 도움이 될 것입니다.

답변

0
  1. 장소 타일 당신은 (지금 당신의 시작 타일) 목록 unvisitedNodes에서 발견 할 수 있습니다.
  2. 타일을 unvisitedNodes에서 잡고 조사하십시오.
  3. 심사 후, visitedNodes에 unvisitedNodes에서 목록을 타일을 이동합니다.
  4. 타일을 검사 할 때 인접한 타일 각각이 목록 중 하나에 있는지 확인하십시오.
  5. 그렇지 않으면 문제의 이웃이 새로운 발견입니다. unvisitedNodes 목록에 추가하십시오. unvisitedNodes까지 포인트 에서
  6. 반복이 들어

빈되고, I로 시작하는 좋은 작은 수집 (목록/큐/세트) 라이브러리를 작성하는 것이 좋습니다 것입니다.

+0

다소 특별한 시나리오이므로 위의 해결책은 정확하지 않을 수 있지만 필요에 따라 조정할 수 있습니다 – Powerslave