我有一个基于约束构造随机图像的应用程序。随机选择不同颜色的像素并将其放置在满足所有约束的网格中。例如(简化),可能存在一个约束,表示蓝色或绿色像素是(0,-1),红色像素是(-1,-1)和(-1,0),然后放置禁止使用白色像素。这些坐标是来自当前放置位置(即其邻域)的矢量。
现在我将约束存储在数组中并循环遍历它们,检查每个约束是否适用。我必须为我放置在网格中的每个像素执行此操作。因此,随着更多约束的增加,性能会受到影响。此外,两个约束可能存在冲突,但要检查它并不容易。
我认为图形类型数据结构(树?)可能是存储所有约束的一种方式,这样我就可以从像素邻域中快速确定哪些(如果有的话)约束适用。但考虑到单个坐标可以包含多种颜色,以及如何将一组坐标/颜色与一组禁用的像素颜色联系起来,我无法弄清楚如何使这样的结构起作用。有什么想法吗?
答案 0 :(得分:2)
没有使用模式匹配,但我想到的是:
采用通常的图形ds,其中顶点将是您的向量,边缘将是连接它们的禁止颜色。 在这里你可以连接彼此之间的所有顶点,更优化的是采取一些方向,你将使用填充你的ds,你应该使用相同的起点和方向,当你将通过像素数组。 从你的例子开始,如果从(0,-1)顺时针方向开始,它将是:(0,-1) - blue--( - 1,-1),(0,-1) - green- - (-1,-1),( - 1,-1) - red - (-1,0),(-1,0) - red - ( - 1,1),( - 1, 1) - 白色 - (0,1),(-1,1) - 白色 - (1,1),(-1,1) - 白色 - (1,0)
现在使用DFS搜索要检查的颜色(它将是边缘)
答案 1 :(得分:1)
对于此问题,您可以使用不同类型的树。
这似乎是一个广泛研究的主题,可能答案会比正常的答案更长。请参阅下一个链接: