-2

単純なプログラミング問題の解決策を書いていますが、map :: find()を機能させることができません。BFSを使用しているときに、マップを使用して訪問した頂点をマークしています。2Dブール配列などの他のデータ構造を使用できることは知っていますが、マップで機能させることを本当に望んでいます。これが私のコードです:http://pastebin.com/mANej4vp

問題は、tempRの位置がまだ訪問されていなくても、visited[tempR]が常に真であるということです。また、visited.size()は1ですが、visited[now]とvisited[tempR]の両方にtrueとして応答します。tempRは今と同じではありませんが。

Duom.inファイルには次のものが含まれている必要があります:http://pastebin.com/L7qMG0bd

なぜこれが起こっているのか分かりますか?

4

2 に答える 2

3

あなたoperator<operator==は一貫性がありません

2つのポジション

pos p1 = {1, 2, 3, 4};
pos p2 = {1, 10, 20, 30};

bool b1 = !(p1 < p2) && !(p2 < p1);
bool b2 = p1 == p2;

b1は真なのでb2、定義上は真でなければなりませんが、そうではありません。

言い換えれば、operator<適切な比較を行うためだけでなく、あなたを書き直してくださいHx

于 2012-11-16T17:36:56.053 に答える
2

私はあなたのコードをデバッグしていません、そして私はそれを本当に理解していません、しかしの意味論はbool operator<(const pos& a) const私に逆になっているようです。

this->Hx < a.Hxstd :: mapは、少なくともHxが正の座標を表す場合は、を返す必要があるそのメンバー演算子のみを使用することを考慮してください 。そして、それは順序である必要があります。2D座標であるため、とにかくxとyの組み合わせを使用する必要があるようです...

于 2012-11-16T17:34:06.857 に答える