我正在努力解决以下问题
http://uva.onlinejudge.org/external/1/193.html
但是我无法获得快速解决方案。
正如其他人所见,应该有一个最大n ^ 2复杂度的解决方案
我可以得到一些帮助吗?
答案 0 :(得分:1)
你只能以指数复杂度解决这个问题,但这并不像听起来那么糟糕,因为在实践中你将能够避免很多错误的决定,从而大大减少算法的运行时间。
简而言之,您必须从节点运行DF搜索并尝试将尽可能多的节点着色为黑色。如果您在具有相邻黑色节点的节点上,则该节点只能是白色。为每种特定节点着色的可能性继续这样做。
如果您无法弄明白,请查看我通过Google搜索找到的问题名称的两个代码段:one和two。作者说他们得到AC,但我还没有测试过。然而,它们看起来是正确的。
答案 1 :(得分:0)
它正在解决称为最大集团的问题,也称为最大独立集或最大稳定集。它是NP-Complete。我知道的小图表中最快的代码是Cliquer:http://users.tkk.fi/pat/cliquer.html
如果您是出于教育目的编写自己的,那么最好先进行深度优先搜索,一次将一个节点着色为黑色,如果两个黑色节点正在触摸,则退回DFS。
最简单的代码解决方案是实现二进制计数器并尝试所有2 ^ n种可能性。
答案 2 :(得分:0)
我在FaceBook谜题上解决了类似的问题,我使用了B-K算法。