Java-решение теоремы четырех цветов

Я пытаюсь реализовать теорему о четырех цветах. Теорема о четырех цветах утверждает, что любую карту на плоскости можно раскрасить в четыре цвета таким образом, что области, имеющие общую границу (кроме одной точки), не будут иметь один и тот же цвет. Есть карта, разделенная на регионы, и регионы помещены в матрицу смежности, и, используя четыре цвета, я пытаюсь раскрасить карту так, чтобы никакие две смежные области не имели одинаковый цвет. Матрица смежности используется для кодирования того, какая область граничит с другой областью. Столбцы и строки матрицы — это области, а ячейки содержат 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;
         }
      }
   }


}

person nviens    schedule 23.09.2014    source источник
comment
Вы столкнулись с проблемой или вам нужен общий совет?   -  person Jeff    schedule 23.09.2014
comment
В первую очередь общий совет, я не знаю, куда идти отсюда, чтобы получить ожидаемый результат.   -  person nviens    schedule 23.09.2014
comment
Раскраска графов — обширная тема, и для многих распространенных классов графов, включая многие планарные графы, трудно найти точное решение, хотя на практике используются некоторые хорошие эвристики. Отправной точкой Википедии является en.wikipedia.org/wiki/Graph_coloring#Algorithms.   -  person mcdowella    schedule 23.09.2014
comment
Я быстро взглянул на это, и это имеет некоторый смысл. Имеет ли код, который у меня есть, смысл или есть более эффективный способ его написания?   -  person nviens    schedule 23.09.2014
comment
Каков является ожидаемый результат? Если у вас есть только четыре региона, как в вашем примере, любая расцветка карты, присваивающая каждому региону свой цвет, будет приемлемой. Если вам нужно наименьшее количество цветов, которых в этом примере три, это другая проблема, но вы не должны называть это проблемой теоремы о четырех цветах.   -  person ajb    schedule 23.09.2014
comment
Ожидаемый результат: 1 2 3 2 И цель состоит в том, чтобы иметь наименьшее количество цветов для данной карты, которые будут варьироваться, но тестовый пример на данный момент — это четыре региона.   -  person nviens    schedule 23.09.2014
comment
Вы должны посмотреть на этот связанный вопрос: Четырехцветная теорема Java-реализация карты США   -  person DaoWen    schedule 23.09.2014