所以,我正在研究Scilab中的一个解决二进制拼图的程序。然而,我遇到了一个问题。任何人都可以向我解释解决带间隙的二进制序列背后的逻辑(如[1 0 -1 0 -1 1 -1],其中-1表示空单元格。我想要给定序列的所有可能解决方案。到目前为止,我有:
function P = mogelijkeCombos(V)
for i=1:size(V,1)
if(V(i) == -1)
aantalleeg = aantalleeg +1
end
end
for i=1:2^aantalleeg
//creating combos here
end
endfunction
抱歉,有些话是荷兰语
aantalleeg意味着amountempty,我的意思是空单元格的数量
我希望我给你们足够的信息。我不需要编写任何代码,我只是想知道我如何能够完成所有可能的演绎,因为我完全陷入困境。
BTW这是一项学校作业,但作业比这更大,而且只是我需要一些想法的一小部分
事先提前答案 0 :(得分:0)
您可以通过扩展代码并创建长度为“amountempty”的所有可能二进制字来创建组合,并在V的空单元格中逐位替换它们。
查找所有空单元格位置
例如,您可以从1开始从左到右进行检查,如果单元格为空,请将位置添加到您的位置列表中。
V = [1 0 -1 0 -1 1 -1]
^ ^ ^
| | |
1 2 3 4 5 6 7
// result
positions = [3 5 7]
计算您找到的职位数量
//result
amountempty = 3;
创建长度为amountempty
的所有可能二进制数您可以使用SciLab中的dec2bin
功能创建所有可能的数字或单词。可能的单词数量很容易确定,因为你知道how much separate values can be represented的长度是一个很长的单词。
// Create the binary word of amountEmpty bits long
binaryWord = dec2bin( i, amountEmpty );
生成的binaryWord将是一个字符串,您必须split it分成不同的位和convert it to numbers。
为您生成的每个binaryWord
现在通过从原始V开始创建一个可能的解决方案,并使用binaryWordPerBit中的位填充位置列表中位置的每个空单元格
possibleSequence = V;
for j=1:amountEmpty
possibleSequence( positions(j) ) = binaryWordPerBit(j);
end
我希望你“能够成功地遇到我们的行动”