图形着色所有可能的解决方案,特殊情况

时间:2019-05-05 15:30:14

标签: java arrays graph-coloring

我正在尝试解决有网格的问题。说 (3xn) 。使用 3 颜色。我想要所有可能解决方案的数量。网格的相邻单元可以具有相同的颜色。唯一的限制是:

No one single row or column can have all cells having the same colour.

 我如何才能最好地解决大约25000列的问题?

我解决了没有相邻细胞应该具有相同颜色的问题。对于3行2列,给出了54个解决方案。 我刚刚从this site更改了代码 并检查边缘情况。

例如底端:

boolean isBottomOk(int r, int c, int n)  {
    if(r == numberOfRows - 1) return true;
    if(grid[r + 1][c] != n) return true;
    return false;
}

最后像这样解决它:

 void solve(int r, int c)
    {
        for(int i = 1; i <= numberOfColors; i++)
        {   
            if(valid(r, c, i))
            {
                grid[r][c] = i;
                if(r == numberOfRows - 1 && c == numberOfColumns - 1) 
                {
                    printBoard();
                    numberOfCombinations++;
                }
                else if(r == numberOfRows - 1) solve(0, c + 1);
                else solve(r + 1, c);
            }
        }
        grid[r][c] = 0;
    }

    boolean valid(int r, int c, int n)
    {
        return(isLeftOk(r, c, n) && isRightOk(r, c, n) &&  isTopOk(r, c, n) &&  isBottomOk(r, c, n));
    }

结果。我希望有一个适用于所有3xn网格的解决方案,该网格最多可以使用3种颜色的25000列。

0 个答案:

没有答案