첫 번째 - 비슷한 질문을 보았지만 문제를 해결하지 못했습니다. 반복이 아닙니다 (희망 사항).
저는 미로를 해결하기로되어있는 Arduino Nano로 로봇을 만들고 프로그래밍하고 있습니다. 그것은 미로의 어딘가에 놓인 다음 아이템을 찾아야합니다. 다음 번에 항목으로 바로 가야합니다 (가장 짧은 길 일 필요는 없지만 막 다른 길은 허용되지 않습니다).
전체 미로를 알 필요는 없습니다. 항목에 일방 통행이있는 한 좋기 때문입니다. 내가 말했듯이, 나는 가장 짧은 길을 필요로하지 않는다.
미로는 2D입니다. 검은 색 테이프를 흰색 테이블에 놓기 만하면 로봇이 라인 센서를 사용하여 라인을 따라 가게됩니다.
자신을 지향하는 다른 센서가 없습니다. 먼저 2D 배열을 만들고 미로의 각 필드를 필드에 넣을 생각을했습니다. 그러나 로봇은 보통의 라인 센서이므로 로봇은 직선이 한 두 필드 길이인지, 전체가 작동하지 않는지 알지 못합니다.
나는 DFS 같은 것을 시도했으나 유사한 문제는 여기에있다. 미로는 원형이며, 로봇은 이전에 노드가 이미 발견되었고 그것이 동일하다는 것을 어떻게 알 수 있습니까?
누구나 아이디어가 있다면 좋을 것입니다!미로를 로봇으로 매핑하는 방법은 무엇입니까?
답변
오리 엔테이션이 약간 퍼지 있지만 결정을 사용하면 가능합니다. 결정은 재현 가능해야합니다. 그것은 클래스에 의해 표현 될 수있다 :
public class Decision {
boolean[] directions = new boolean[2]; // 0 = left, 1 = straight, 2 = right
// at least 2 of them should be true or it is no decision
int path; // 0-2 to mark the current path
}
의사 결정의 스택을 만듭니다.
처음에는 가능한 한 방향 만 있습니다 (백은 계산되지 않고 나중에 처리됩니다). 그러면 첫 번째 결정을 만날 때까지 앞으로 이동하십시오.
스택에서 가능한 모든 방향으로 결정을 푸시하십시오.
path
을 첫 번째 가능한 방향으로 설정하고 그런 식으로 이동하십시오. 다른 결정에 끝날 경우: 당신이 토큰을 찾을 경우 3.
에 계속 : 당신은 죽은 엔드없이 재현 방법을 발견, 중단.
가 죽은 엔드 인 경우 : 이전 결정 노드 (첫 번째 일 돌아 오는 길)과 복귀가 결정 팝 6.
를 계속하고 새로운 설정 (다음 가능한 방향으로 시도 경로와, 우리가 결정을 밀어) 당신이 모든 방향을 시도하지 않는 한 5
에서 계속 다음 다른 결정을 뒤로 이동하고 (특별한 경우는 위에서 언급 한 더 이상 의사 결정이없는 경우 6.
계속 처음에는 잘못된 방향으로 진행) : 첫 번째 결정을 충족하고 계속 진행할 때까지 앞으로 나아갑니다. 즉, 시작 부분에서 바로 뒤로 가야 하는지를 나타내는 다른 부울 변수가 필요합니다.
left
에서 되돌아 와서straight
을 시도하고 싶을 때는 왼쪽으로 돌리지 말고 곧장 가지 않아야합니다. 따라서 약간의 계산이 필요합니다.
처음에 잘못된 길을 시작하면 알고리즘에 루프 모양의 결정에 문제가 있습니다. 나는 이것이 상한을 설정함으로써 도망 갈 수 있다고 생각한다. 아직 토큰을 찾지 못했고 앞으로 30 개의 결정 노드를 만난다면 앞으로 서클에서 돌아 다니기 시작합니다. 따라서 순서대로 시도하는 대신 시작하여 순서대로 시도해보십시오.
감사! 그게 정확히 제가 찾고있는 것일 수 있습니다. 6 단계에서 '결정을 내리겠습니다'- 결정을 내리는 대신 방향을 터뜨려야한다는 것을 의미합니다 (마지막 경로를 제거하고 다음 방향으로 새로운 경로를 설정). – po0l
@ po0l 예 다음 방향으로 설정하고 탐색 할 왼쪽이있는 경우에만 다시 밀어 넣습니다. 그렇지 않은 경우 의사 결정을 유지해야하며, 막 다른 골목이라면 길을 잃어 버릴 수 있습니다. 모든 결정은 처음 발생한 방향을 기준으로합니다. 따라서 어느 경로를 탐험했는지 알기로 결정해야합니다. 직전과 계속하는 법. – maraca
- 1. Java 로봇으로 부드럽게 스크롤하는 방법은 무엇입니까?
- 2. 3D 미로를 2D 미로로 변환하는 방법은 무엇입니까?
- 3. 자바 - 로봇으로 클릭
- 4. 데이터베이스를 매핑하는 방법은 무엇입니까?
- 5. 텔레 그램 로봇으로 회원 목록을 얻는 방법은 무엇입니까?
- 6. 자바 로봇으로 숫자가 아닌 숫자를 입력하는 방법은 무엇입니까?
- 7. 고정 입구 및 출구 지점을 사용하여 미로를 생성하는 방법은 무엇입니까?
- 8. 전체 미로를 다시 그리지 않는 가장 좋은 방법은 무엇입니까?
- 9. 미로를 통과하는 최단 경로
- 10. 미로를 통과하는 알고리즘
- 11. 미로를 나타내는 데이터 구조
- 12. @RequestParam을 객체에 매핑하는 방법은 무엇입니까?
- 13. 숫자를 색상에 매핑하는 방법은 무엇입니까?
- 14. 구체를 정사면체에 매핑하는 방법은 무엇입니까?
- 15. IntelliJ에서 파일을 매핑하는 방법은 무엇입니까?
- 16. 컴포지션 관계를 매핑하는 방법은 무엇입니까?
- 17. 문자열을 URI에 매핑하는 방법은 무엇입니까?
- 18. nhibernate에서 인터페이스를 매핑하는 방법은 무엇입니까?
- 19. ModelAttribute의 속성을 매핑하는 방법은 무엇입니까?
- 20. flex에서 견적을 매핑하는 방법은 무엇입니까?
- 21. reactjs에서 값을 매핑하는 방법은 무엇입니까?
- 22. Servlet을 올바르게 매핑하는 방법은 무엇입니까?
- 23. MainWindow에서 QGraphicsItem으로 매핑하는 방법은 무엇입니까?
- 24. 존재하는 개체에 매핑하는 방법은 무엇입니까?
- 25. elasticsearch에서 문자를 매핑하는 방법은 무엇입니까?
- 26. JPA로 엔티티를 매핑하는 방법은 무엇입니까?
- 27. 배열을 async.js와 매핑하는 방법은 무엇입니까?
- 28. 미로를 가로 지르는 최상의 경로
- 29. 미로를 풀기위한 역 추적과 재귀
- 30. 미로를 재귀 적으로 풀어 냄
"로봇이 * 라인 센서를 사용하여 라인 *을 따라야합니다." 나는 단지 궁금해. 라인 센서가 2, 3 방향으로 어떻게 반응하는지? –
3 개의 별도 센서가 있습니다. 각각 하나는 다른 값을 가지며 가운데 하나만이 라인에 있습니다. 왼쪽이나 오른쪽 방향으로 센서가 왼쪽이나 오른쪽으로 움직이면 선 위로 마우스를 가져 가면 검은 색으로 변하고 그 방향으로 볼 수 있습니다. – po0l
가지를 임의로 선택하는 것은 어떻습니까? – melpomene