2017-11-22 6 views
0

私たちの学期のプロジェクトでは、地面の金属を探すことができる小型の車を作りようとしています。オブジェクトが地面に遭遇するたびに、そのオブジェクトの座標をマークし、その周りのパスを見つけて残りのすべてのノードを参照する必要があります。経路探索を使用してグリッド内のすべてのノードにアクセスしますか?

グリッド内に記された領域を取得できる方法を実装しました。したがって、すべてをx-y座標にします。私たちは、システムを見いだすためにpathfindingアルゴリズム(幅優先、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) 

・ホープ、このことができます。

関連する問題