Java中的蛮力色数

Java中的蛮力色数,java,colors,matrix,brute-force,Java,Colors,Matrix,Brute Force,这是对矩阵色数的一次强力尝试。从某种意义上说,它似乎可以为我提供所需的正确颜色数,但它将显示1,2,3,6,而不是1,2,3,4。出于某种原因,即使矩阵可能成功地使用较少的颜色,它仍然会失败并继续使用最大值。它继续失败有什么原因吗 n是最大颜色数。v是顶点,m是当前使用的颜色数 伪代码: 样本输出: 文件名:file1 输入 6. 0 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1次失败

这是对矩阵色数的一次强力尝试。从某种意义上说,它似乎可以为我提供所需的正确颜色数,但它将显示1,2,3,6,而不是1,2,3,4。出于某种原因,即使矩阵可能成功地使用较少的颜色,它仍然会失败并继续使用最大值。它继续失败有什么原因吗

n是最大颜色数。v是顶点,m是当前使用的颜色数

伪代码:

样本输出:

文件名:file1 输入 6. 0 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0 1 0 1 1 1 1 1 1 0 1次失败 2失败 3次失败 4次失败 5次失败

颜色:
12336

啊,我应该睡着了!但是我无法计算我把任务推迟到最后一刻的次数,所以我对你的最后期限表示同情

这并不是一种蛮力方法,因为这实际上可以归结为尝试每一种可能的节点着色组合,并检查哪些不冲突。您的方法是一种启发式方法,称为。它可以找到最佳结果,但也可以产生任意糟糕的解决方案。也就是说,我已经尝试手动查看您提供的示例输入,谢谢,Microsoft Paint,按照该算法,当从顶点0开始时,结果应该是4

下面是我认为您的代码可能有问题的地方。在下面的摘录中

if(input[v][j] == 1)
{
    if(q[v] == j+1)
    match = true;
}
您似乎正在将当前顶点的颜色(无论如何都是i)与顶点索引进行比较,而不是与另一个顶点的颜色进行比较。我想你需要把内部测试改成

if(i == q[j])
或者,如果你希望不会有什么不同

if(q[i] == q[j])
而且,你做的检查有点太多了。顶点0可以指定为颜色1。如果顶点1相邻,则需要对照顶点0检查顶点1。如果顶点2相邻,则需要对照0和1检查它们,依此类推。您正在检查尚未指定颜色的顶点。所以不要将j限制为n,而是将其限制为当前顶点v

最后,使用像ifmatch==false这样的构造非常容易混淆,也没有必要。只要使用if!而不是比赛


希望这有帮助。如果您仍然感到困惑,而我恰好及时捕捉到了评论,我可以提供更多的指针。

色数难道不是图的属性吗?我不确定这和矩阵有什么关系。。。你的矩阵代表什么?1和0的区域是否必须着色?编辑:还有,这是家庭作业吗?如果是,也没关系,但是应该这样标记,以便人们知道如何指导您,而不是提出完整的解决方案。矩阵中的1表示图的两个顶点之间的链接。每个节点都必须着色,1和0只是告诉你哪些节点是连接的,哪些节点不是。啊,这是一个邻接矩阵。现在我们有进展了。是的,对不起。我想不出它的正确名字。邻接矩阵确实是它应该是的。好吧,我认为如果不看看你的代码是如何被使用的,它仍然会很难。即调用颜色并打印结果的部分。我现在得回家了,我的大学时光已经成为遥远的记忆,但是如果明天没有人回答这个问题,我会试着记得仔细看看。这确实是代码中的一个简单错误。谢谢你的帮助。也不是关于最后一分钟,更重要的是这是我一周内的第四个项目。@Brian无意暗示你一直在拖延。只是我有份在最后期限前感受到你的痛苦。请注意,在我的情况下,这肯定是因为我懒得吓人:祝你在作业上好运。你就快让它工作了。我设法使算法运行起来。现在我真的要走了,现在是凌晨2:30。
if(q[i] == q[j])