変換する必要はありません。あなたはある時点(i、j)にいると想像してください。 (私は各四角形から4つの動きが許されていると仮定します)。
1)そのインデックスが内部にある場合は、(i + 1、j)、(i、j + 1)、(i-1、j)、テーブル 2)そのインデックスにはX
のマークがついていません。したがって、あなたのダイクストラアルゴリズムに正方形Sの位置を与えます。また、データ構造に新しい正方形のセットを追加するたびに、 Dの位置に達すると、それを印刷します。
さらに、この問題は私には重み付けされていないように見えるので、キューを使用して単純なBFSを使用することもできます。しかし、あなたがダイクストラを使い、異なる広場に行くことが異なるコストを持っている場合。キューの代わりにプライオリティキューを使用します。 はたとえば、あなたはこのように、設定されたデータ構造を使用することができます。
int dist[][]; // this contains the cost to get to some square
//dist is initialized with a large number
struct node{
int i, j; //location
node(int ii, int jj){
i = ii;
j = jj;
}
bool operator < (node &n)const{ //set in c++ will use this to sort
if(dist[i][j] == dist[n.i][n.j]) return i < n.i || j < n.j; //this is necessary
return dist[i][j] < dist[n.i][n.j];
}
};
set <node> q;
int main(){
//initialized dist with large number
dist[S.i][S.j] = 0; //we start from source
q.push(node(S.i, S.j));
while(true){
//pick the first element in set
//this element has the smallest cost
//update dist using this node if necessary
//for every node that you update remove from q and add it again
//this way the location of that node will be updated in q
//if you see square 'D' you are done and you can print dist[D.i][D.j]
}
return 0;
}
HMは多分これが質問のこの種を依頼する間違った場所である(しかし、私は知らないものです。)いくつかのコードを投稿質問を変更してみてくださいあなたは単一の問題に集中している..これはあまりにも大きく、あまりにも理論的な.. – nayana
また、私たちはあなたの問題についての詳細を教えてください...例えば:私は斜めに行くことができますか? 4からSまでDから言うことができますか?または垂直と水平のみ?次へ:2D配列かノーリストのadj.matrix/listを操作するか、リンクされたリスト(接続されているノード)のようにしたいですか? – Thomas
btw:変換方法を知りたいだけですか?またはダイクストラをプログラムするのに問題がありますか? – Thomas