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