Я пытаюсь реализовать теорему о четырех цветах. Теорема о четырех цветах утверждает, что любую карту на плоскости можно раскрасить в четыре цвета таким образом, что области, имеющие общую границу (кроме одной точки), не будут иметь один и тот же цвет. Есть карта, разделенная на регионы, и регионы помещены в матрицу смежности, и, используя четыре цвета, я пытаюсь раскрасить карту так, чтобы никакие две смежные области не имели одинаковый цвет. Матрица смежности используется для кодирования того, какая область граничит с другой областью. Столбцы и строки матрицы — это области, а ячейки содержат 0, если две области не являются смежными, и 1, если они граничат.
EDIT Это должно быть рекурсивно
Матрица смежности, которую я использую:
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;
}
}
}
}
1
2
3
2
И цель состоит в том, чтобы иметь наименьшее количество цветов для данной карты, которые будут варьироваться, но тестовый пример на данный момент — это четыре региона. - person nviens   schedule 23.09.2014