C#Domino函数,它将不确定数量的Domino tile作为输入

C#Domino函数,它将不确定数量的Domino tile作为输入,c#,console,tiles,C#,Console,Tiles,我真的付出了很多努力去理解如何解决这个问题,但不幸的是,我仍然缺少一些东西,这就是为什么我不能解决这个问题。问题是: 编写一个函数,该函数将不确定数量的domino分片作为输入,并确定是否可以将它们并排放置在只有匹配数字的行中。可能返回true,否则返回false。 每个多米诺骨牌的两面都有数字0-6,如下图所示。 示例A: [2,2], [2,3],[3,6].. 此案例返回true。 例B:[3,1],[1,5],[3,6]。。 此案例返回false。 详细说明:使用上面的示例,[[2,2]

我真的付出了很多努力去理解如何解决这个问题,但不幸的是,我仍然缺少一些东西,这就是为什么我不能解决这个问题。问题是: 编写一个函数,该函数将不确定数量的domino分片作为输入,并确定是否可以将它们并排放置在只有匹配数字的行中。可能返回true,否则返回false。 每个多米诺骨牌的两面都有数字0-6,如下图所示。
示例A: [2,2], [2,3],[3,6].. 此案例返回true。
例B:[3,1],[1,5],[3,6]。。 此案例返回false。

详细说明:使用上面的示例,[[2,2]、[2,3]、[3,6]]以以下格式将domino磁贴的数量作为函数的输入:

以下是他们启动推荐功能的方式:

public bool dominos(long[,] arr1,  long dim_1, long dim_2){    
}

我将使用递归搜索来解决这个问题——编写一个函数,该函数将遍历所有允许的domino分片组合。 这样,您将获得任何一组瓷砖的精确解决方案,尽管效率不是很高。然后你可以开始寻找更快的算法,但我不确定是否存在更快的方法来确定你的问题的答案,或者在比指数更快的时间内找到解决方案是否与你相关

用于搜索所有解决方案的伪代码如下所示:


基本上,您似乎希望使用某种对象来表示Domino磁贴。它应该有2个值,可能还有左/右指示

从这里开始,使用递归调用来检查是否使用了第一个磁贴,是否可以将其余的磁贴放在后面,如果没有,则交换它,然后重试,这是一件小事。如果可以,返回成功;如果不能,返回失败


每一步,你基本上都会说,走一步,试试其余的。因此,最后一步将得到1个tile,并返回true,从这里开始,它取决于您拥有的tile。

您所需要的是计算每个数字出现的频率

如果两个或更少的数字有奇数计数,则返回true,否则返回false

在计数之前,移除任何其他磁贴上的所有带数字的双精度数字


为空列表返回false

我删除了标签“lotus domino”,因为它与IBM的Notes domino无关。是的,我的意思是domino tiles,thx无论如何,我都不理解示例二:domino tiles可以翻转,因此可以很容易地解决为(6,3)(3,1)(1,5)。这将在[[3,3],[5,5]]上失败。是的,我有它,但删除了它,现在它又回来了;-)
bool dominos(int[,] current, int[,] left)
{
  if (left.Length == 0) {
     Console.Writeln(solution = current);
     return true;
  } else {
     bool result = false;
     foreach(next in left.Where(tile matches ending of current path)) {
         result = result || dominos(current with appended next, left without next)
         if (result)
             break;
     }
  }
}