我正在尝试实现四色定理。四色定理指出,平面上的任何地图都可以使用四色着色,使得共享共同边界的区域(除了单个点)不共享相同的颜色。有一个分成区域的地图,这些区域被放入一个邻接矩阵中,通过使用四种颜色,我试图为地图着色,以便没有两个连续的区域共享相同的颜色。邻接矩阵用于编码哪个区域与另一个区域接壤。矩阵的列和行是区域,如果两个区域不相邻,则单元格包含 0,如果它们有边界,则包含 1。
编辑 它必须是递归的
我使用的邻接矩阵是:
A B C D
A 0 1 1 1
B 1 0 1 0
C 1 1 0 1
D 1 0 1 0
我被困在哪里去。提前感谢您的帮助。
这是我的代码:
public class FourColorTheorem
{
public static int[][] nums = {{0,1,1,1},{1,0,1,0},{1,1,0,1},{1,0,1,0}};
public static int[] states;
public static int[][] border;
public static int[] setNeighs;
public static int[][] neighbors;
public static void main(String[] args)
{
createStatesArray();
printArray();
if(tryColor(0))
System.out.println("Works");
else
System.out.println("Did not color all");
}
public static int[][] checkNeighbors(int r)
{
border = new int[4][4];
for(int i=0;i<4;i++)
{
if(nums[r][i] == 0)
border[r][i] = -1;
else
border[r][i] = 1;
}
return border;
}
public static void setNeighbors(int r)
{
for(int x = r;x<4;x++)
{
setNeighs[x] = states[x+1];
}
}
public static boolean tryColor(int row)
{
int p=0;
boolean q = false;
if(row>4)
return true;
if(states[row] == 0)
{
states[row] = 1;
setNeighbors(row);
}
if(row>1)
if(setNeighs[row] == setNeighs[row-1])
return false;
int[][] temp = checkNeighbors(row);
return false;
}
public static void printArray()
{
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
System.out.print(nums[i][j]);
}
System.out.println();
}
addBorder();
}
public static void createStatesArray()
{
states=new int[4];
setNeighs=new int[4];
for(int i=0;i<4;i++)
{
states[i] = -1;
System.out.print(states[i]);
}
System.out.println();
}
public static void addBorder()
{
border = new int[4][4];
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(nums[i][j] == 0)
states[i] = 1;
}
}
}
}