-2

我正在为一个简单的编程问题编写解决方案,但我无法让 map::find() 工作。我在使用 BFS 时使用地图来标记访问的顶点。我知道我可以使用其他一些数据结构,例如 2D bool 数组,但我真的很想让它与地图一起使用。这是我的代码: http: //pastebin.com/mANej4vp

问题是visited[tempR] 始终为真,即使尚未访问tempR 位置。而且visited.size() 为1,但它同时响应visited[now] 和visited[tempR] 为真;而 tempR 不等于现在。

Duom.in 文件应包含以下内容:http: //pastebin.com/L7qMG0bd

你知道为什么会这样吗?

4

2 回答 2

3

你的operator<operator==不一致

两个职位

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对我来说似乎是相反的语义。

考虑到 std::map 只使用那个应该返回的成员运算符, this->Hx < a.Hx至少如果 Hx 代表一个正坐标。它应该是一个顺序,作为 2D 坐标似乎你应该使用 x & y 的组合......

于 2012-11-16T17:34:06.857 回答