我目前正在开发一个程序,它可以从形成轮廓的文件中读取一组坐标,然后使用泛光填充算法填充它。
以下代码似乎在无限循环中运行,但我似乎无法发现原因。
非常感谢帮助或建议: - )
'hello bye'
答案 0 :(得分:2)
我部分确定你的算法实际上已经终止了,但只是在很长一段时间后(假设队列有足够的内存)。我需要有关sizes
值的更多详细信息才能完全确定。
让我们玩一个小的3x3示例字段并假设整个floor((Node-sizes[1]*sizes[2]*floor(Node/(sizes[1]*sizes[2])))/sizes[1])
只是边界检查(它是什么?)。
字段(数字是位置名称):
1 2 3
4 5 6
7 8 9
假设starting_point = 1
我希望这说明算法如何经常重复相同的事情,即使对于一个小字段 - 对于更大的字段大小,这种效果会增加。
所以你可以做的是确保每个节点只排队一次。我认为评估顺序并不重要,因此您可以使用queue
代替set
来存储工作集。这将确保每个号码仅在同一时间排队一次。
您还可以组合队列和设置,以便保持评估顺序。
set < int > marker;
queue < int > MyQue;
// ... replace later in code
// MyQue.push(SomeNode);
// by
if (marker.insert(SomeNode).second) {
MyQue.push(SomeNode);
}
编辑:稍微更改了if条件。如果marker.insert(SomeNode).second
已插入,则true
将为SomeNode
;如果false
已成为该集合的一部分,则SomeNode
将为call xpath.bat "connection.config" "//connection/@name"
call xpath.bat "connection.config" "//connection/@value"
。