四色定理java解决方案

时间:2014-09-23 04:07:16

标签: java arrays algorithm matrix theorem

我正在尝试实现四色定理。四色定理指出,平面中的任何地图都可以使用四种颜色进行着色,使得共享共同边界(不是单个点)的区域不共享相同的颜色。有一个地图被分成不同的区域,并且这些区域被放入一个邻接矩阵中,并且通过使用四种颜色我试图为地图着色,这样就没有两个连续的区域共享相同的颜色。邻接矩阵用于编码哪个区域与另一个区域相邻。矩阵的列和行是区域,而如果两个区域不相邻则单元格包含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;
         }
      }
   }


}

0 个答案:

没有答案
相关问题