从颜色网格生成邻接列表



我在网上找不到类似的东西。我有一个有多种颜色的网格,用0到N表示。例如,图形可能看起来像这样:

0 0 1 1 1 2 2
0 1 1 1 1 1 1
1 1 3 3 3 4 4
1 1 3 4 4 4 4

我想在一个相邻列表中表示这一点,该列表显示哪些是连接的。这看起来非常简单和常见,但我在网上找不到解决方案。

所以结果列表看起来像:

0: 1
1: 0, 2, 3, 4
2: 1
3: 1, 4
4: 3, 1

我的想法是从左上角到右下角浏览整个网格,检查北、南、东、西是否有不同的颜色,然后在相邻列表中添加边缘。我不知道这是否是一个好算法(我本以为会有floodfill,但我认为我不需要它(。我希望这里的专家能给我一个更好的算法,或者确认这个算法是有效的。

您的"算法"需要更多细节,但似乎基本上是正确的。

有关类似问题的详细信息,请参阅(https://github.com/JamesBremner/PathFinder/wiki/Hills(,它在正交网格中观察高度(而不是颜色。(

您可以查看C++代码,该代码从这里开始读取网格并创建邻接矩阵。我希望您可以将其移植到java,并根据您的特定需求进行调整。

一个简单的解决方案是从左上到右下迭代。对于给定的单元格,请检查两个相邻的单元格:右边的单元格和下面的单元格。假设网格的左上角有坐标(0,0(,右下角有坐标为(m,n(。然后,当你在单元(i,j(时,你检查邻居:(i+1,j(和(i,j+1(。维护一个哈希图来跟踪你的邻接列表。设c_i,j是单元(i,j(的颜色。每次添加迭代:adjacencyMap.get(c_i,j).add(c_i,j+1)colorMap.get(c_i,j+1).add(c_i,j)当你在(i,j(并且你检查(i+1,j(时。类似于(i,j(和(i,j+1(。

注意:我不确定你是否也考虑对角线上的邻居。如果是这种情况,您还可以检查(i,j(和(i+1,j+1(。

相关内容

  • 没有找到相关文章