对于每个连接点集合,通过所有连接点一次的算法
Algorithm to pass through all the connected points once for each collection of connected points
我试图遍历2D数组中的每个"特殊"点一次,我制作了一个递归函数,但它多次遍历多个点,从而使特殊点的集合比它应该的要大得多。
void foo(int x, int y) {
if( Board(x,y) == '*' ) {
Point newpoint(x, y, '*');
dq.push_back(newpoint);
foo(x, ++y);//down
//foo(x, --y);//up, disabled up to avoid infinite loops
foo(++x, y);//right
foo(--x, y);//left
}
}
例如,这可能是棋盘,foo将接收左上角星号的位置。
asdf
****
*****
**** ***
4578 * 76767
这是已知的问题吗?它有我可以搜索的名字吗?
PS:我知道如果条件成立,我可以线性地遍历每一行,添加到集合中,但我的最终目标是创建几个连接星号的集合,不知道应该有多少集合。
使用动态编程:将已经通过的板坐标存储为bool
2D数组(foo()
中的foo()
或static
的非本地数组),然后在通过时将每个标记为已通过。然后仅当passed[i][j]
为false
时调用递归。
这里有一个简短的教程,可以让你开始动态编程,它使用递归Fibonacci的典型例子(如果你不使用缓存,即动态编程,那么它的伸缩性当然会非常糟糕):
http://functionspace.com/articles/32/Fibonacci-series-and-Dynamic-programming
看起来可以使用一系列广度优先搜索来查找连接星号的区域。您可以在标记已访问的坐标时修改原始阵列或该阵列的副本,或者如果星号相对于整个板的比例较小,则将访问的坐标对存储在哈希表中可能更有效。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- STL算法函数在多个一维容器上的使用
- 对于每个连接点集合,通过所有连接点一次的算法
- 提取骨架连接点
- 二维数组,计算并存储6个随机连接点
- Microsoft Word连接点接收器示例/MFC出现问题