【问题标题】:Backtracking exercise graph color in CC中的回溯练习图颜色
【发布时间】:2018-06-06 17:11:10
【问题描述】:

有人能解释一下我用来解决这类练习的方法吗?

我有一张包含 5 个区域的地图,我有 4 种颜色:绿色、红色、黄色和蓝色。

我必须用这 4 种颜色为区域着色(相邻区域可能没有相同的颜色)

我必须在标准输出上显示所有可能的解决方案

我曾考虑使用 2 个数组:1 个用于区域,1 个用于颜色,并尝试所有可能的排列。但是如何在数组中设置相邻约束?谢谢。

【问题讨论】:

  • 代表graph的数据结构是什么?
  • 我没有合适的数据结构,我可以使用数组、矩阵、ecc .. 任何我想要的。我必须在标准输出上显示可能的解决方案(控制台项目)
  • 您可以将graph 呈现为节点之间连接的matrix。阅读this了解更多信息。

标签: c graph colors backtracking


【解决方案1】:

解决此问题的一种方法是使用两个矩阵:
1.邻接矩阵
2.着色矩阵

方法:

  1. 使用nested loop 遍历所有块(区域),如果两个区域相邻则取输入 1,否则取输入 0。将这些值存储在与区域对应的矩阵中
    即:

    if(input==1) adjacency[i][j]==adjacency[j][i]==1 else adjacency[i][j]==adjacency[j][i]==0

    这样,您将拥有一个元素矩阵,显示每个元素的邻接关系。

  2. 然后创建一个相同大小的空矩阵进行着色。沿对角线迭代此矩阵(即color[i][i]),为区域分配颜色(按顺序),然​​后检查相邻区域的邻接矩阵。
    如果区域相邻(即adjacency[i][j]==1),则检查相邻区域的颜色(即color[j][j])。如果相同(即color[i][i]==color[j][j]),则将颜色更改为下一种颜色并再次重复该过程,直到为所有区域分配颜色。

注意:这不是解决问题的唯一方法,我也不能说它是最有效的方法,您可以制定出更好的逻辑,降低时间和空间的复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2018-01-21
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    相关资源
    最近更新 更多