2017-11-22 2 views
0

우리 학기 프로젝트에서 우리는 땅에서 금속을 찾을 수있는 작은 차를 만들고자합니다. 지면에있는 물체를 만날 때마다, 좌표를 표시하고 주변의 모든 노드를 방문하는 경로를 찾아야합니다.경로 찾기를 사용하여 그리드의 모든 노드를 방문 하시겠습니까?

우리는 눈에 띄는 부분을 눈금으로 볼 수있는 방법을 구현 했으므로 x-y 좌표로 모두 표시했습니다. 우리는 길 찾기 알고리즘의 수정 된 버전 (너비 우선, A * 또는 다른 것)을 사용하여 시스템을 탐색하는 방법을 찾았지 만 구현에 문제가 있습니다.

이러한 알고리즘을 수정하여 노드 A에서 B로 이동하는 대신 각 좌표를 검색하고 지상에서 객체를 발견하면 "다시 경로 지정"할 수 있습니까?

+0

"방문하지 않은 목록"에 모든 셀을 넣으십시오. "방문하지 않은"목록은 비어 있지 않지만 현재 셀에서 목록의 처음으로 경로를 구성하십시오. 셀에 들어가면 "방문하지 않은"목록에 있는지 확인하고 있으면 방문하여 제거하고 셀에 물건을 넣습니다. 가장 효율적인 방법은 아니지만 수정하지 않고 기존 경로 찾기 알고리즘을 사용하여 구현하기가 쉽습니다. –

+0

@AndrewKashpur이 작업을 수행하고 목록의 모든 노드를 탐색하는 함수를 구현했습니다. 내 문제는 각 노드가 x 좌표와 y 좌표를 모두 가져야한다는 것입니다. 그래서 차에 정보를 보내고 "코너"를 만날 때마다 정보를 돌릴 수 있습니다. 그러나 이것을 구현하는 방법을 이해하는 데 어려움을 겪고 있습니다. 포인터를 가지고 있습니까? – Emil

+0

코드를 표시하면 우리는 몇 가지 포인터를 줄 수 있습니다. @Emil –

답변

0

로직

그래서 먼저 모든 사각형에 금속이 포함되어 있는지 확인합니다. 그런 다음 우리는 부울 그리드에 금속으로 사각형을 저장합니다. 이 도움이

의사 코드

bool grid[10000][10000]; 
for (int i = 0; i < width; i++){ 
    for(int j = 0; j < height; j++){ 
     if (square is metal){ 
      grid[i][j] = true; //means its visited. 
     } 
    } 
} 
//Conduct bfs here 
typedef pair<int , int> pi; //introduce priority queues 
typedef pair<pi, int> ppi; 
int dx[8] = {-1,-2, 1 ,2 ,-1, -2, 1, 2};//introduce movement coordinates 
int dy[8] = {-2,-1, -2,-1, 2, 1, 2, 1}; 
//Check if the coordinates of the grid is true(visited) or false(unvisited) 

희망.

관련 문제