Colors 交叉颜色变化难题的逻辑解决方案

Colors 交叉颜色变化难题的逻辑解决方案,colors,logic,Colors,Logic,我想写一个代码来解决这个难题。 规则: 如果单击绿色平铺,它将变为红色 如果单击红色平铺,它将变为灰色 如果单击灰色平铺,它将变为绿色 此外,如果您单击一个平铺,它的垂直和水平邻接也会改变颜色,如十字 您可以单击任意数量的平铺 对于exmaple: 我在寻找它背后的逻辑,到目前为止我还没有线索。我可以编写代码,这不是我想要的,而是解决方案背后的(数学?)逻辑。例如,魔方的步骤,使有一个完整的有序立方体。我想制作一个自动尝试解决这个问题的程序。如果你用数组来解决这个问题,它非常简单 i

我想写一个代码来解决这个难题。 规则:

  • 如果单击绿色平铺,它将变为红色
  • 如果单击红色平铺,它将变为灰色
  • 如果单击灰色平铺,它将变为绿色
  • 此外,如果您单击一个平铺,它的垂直和水平邻接也会改变颜色,如十字
  • 您可以单击任意数量的平铺
对于exmaple:


我在寻找它背后的逻辑,到目前为止我还没有线索。我可以编写代码,这不是我想要的,而是解决方案背后的(数学?)逻辑。例如,魔方的步骤,使有一个完整的有序立方体。我想制作一个自动尝试解决这个问题的程序。

如果你用数组来解决这个问题,它非常简单

int[][] box;

if(//if you click box[a][b])
{
    change_color(a,b);
    change_color(a-1,b);
    change_color(a+1,b);
    change_color(a,b-1);
    change_color(a,b+1);
}

change_color(int x,int y)
{
      if(box[x][y]==red)
      box[x][y]=grey;
      if(box[x][y]==grey)
      box[x][y]=green;
      if(box[x][y]==green)
      box[x][y]=red;
}

如果使用数组执行此操作,则非常简单

int[][] box;

if(//if you click box[a][b])
{
    change_color(a,b);
    change_color(a-1,b);
    change_color(a+1,b);
    change_color(a,b-1);
    change_color(a,b+1);
}

change_color(int x,int y)
{
      if(box[x][y]==red)
      box[x][y]=grey;
      if(box[x][y]==grey)
      box[x][y]=green;
      if(box[x][y]==green)
      box[x][y]=red;
}

对不起,我的提问有误导性。我可以编写代码,这不是我想要的,而是解决方案背后的(数学?)逻辑。例如,魔方的步骤,使有一个完整的有序立方体。我想制作一个自动尝试解决这个问题的程序。对不起,我的问题有误导性。我可以编写代码,这不是我想要的,而是解决方案背后的(数学?)逻辑。例如,魔方的步骤,使有一个完整的有序立方体。我想做一个程序,自动尝试解决这个问题。