Théorème des quatre couleurs solution java


J'essaie d'implémenter le théorème des quatre couleurs. Le théorème des quatre couleurs stipule que toute carte dans un plan peut être colorée en utilisant quatre couleurs de telle sorte que les régions partageant une frontière commune (autre qu'un seul point) ne partagent pas la même couleur. Il y a une carte séparée en régions et les régions sont placées dans une matrice de contiguïté et en utilisant quatre couleurs, j'essaie de colorer la carte afin qu'aucune région contiguë ne partage la même couleur. La matrice de contiguïté est utilisée pour coder région frontières sur une autre région. Les colonnes et les lignes de la matrice sont les régions, alors que les cellules contiennent un 0 si les deux régions ne sont pas adjacents et un 1 si ils frontière.

MODIFIER Il doit être récursif

La matrice d'adjacence que j'utilise est:

  A B C D
A 0 1 1 1
B 1 0 1 0
C 1 1 0 1
D 1 0 1 0

Je suis coincé sur où aller d'ici. Merci pour l'aide à l'avance.

Voici mon code:

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;
         }
      }
   }


}
Author: tbodt, 2014-09-23