Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何递归组织元素(俄罗斯方块片段)_Jquery_Algorithm_Recursion_Recursive Backtracking - Fatal编程技术网

Jquery 如何递归组织元素(俄罗斯方块片段)

Jquery 如何递归组织元素(俄罗斯方块片段),jquery,algorithm,recursion,recursive-backtracking,Jquery,Algorithm,Recursion,Recursive Backtracking,我正在学习递归,但我需要一个如何开始制作算法的参考。我需要组织块来使用所有的块,以最大可能的填充板。谢谢大家 递归有两个主要思想,第一个是在每一步中,您要解决的问题(在本例中是电路板)应该变小。第二个重要的想法是,每个步骤都是相同的 因此,在这种情况下,您可以放置一个工件,然后在移除放置工件的情况下,在电路板上再次调用函数。让我们再深入一点 每次放置工件并调用函数时,可以放置工件的位置数量都会减少 每次再次调用该函数时,您仍然只是尝试放置平铺。因此,尽管问题空间更小,问题仍然保持一致 希望这有帮

我正在学习递归,但我需要一个如何开始制作算法的参考。我需要组织块来使用所有的块,以最大可能的填充板。谢谢大家


递归有两个主要思想,第一个是在每一步中,您要解决的问题(在本例中是电路板)应该变小。第二个重要的想法是,每个步骤都是相同的

因此,在这种情况下,您可以放置一个工件,然后在移除放置工件的情况下,在电路板上再次调用函数。让我们再深入一点

  • 每次放置工件并调用函数时,可以放置工件的位置数量都会减少
  • 每次再次调用该函数时,您仍然只是尝试放置平铺。因此,尽管问题空间更小,问题仍然保持一致
    希望这有帮助

    这是一个非常简单的算法实现,可以帮助您入门

    它正在寻找一个完美的解决方案(董事会成员全部填满),一旦找到,它将立即退出。这将像您的示例板预期的那样工作,但它可能会永远与其他没有简单完美解决方案或根本没有完美解决方案的板一起运行

    更好的算法将:

    • 为任何电路板寻找最佳解决方案(不仅仅是完美的解决方案)
    • 使用更多试探法加快搜索速度
    该算法中唯一的改进是使用哈希表,以避免在两个不同的移动组合产生相同的配置时访问同一块板两次

    电路板的每一行表示为一个字节,每一块表示为2x2位

    var b=[
    //初始板
    0b00000000,
    0b00000000,
    0B000000100,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000,
    0b00000000
    ],
    件=[
    //块的位掩码为[顶部位掩码,底部位掩码]
    [0b11,0b01],[0b11,0b10],[0b01,0b11],[0b10,0b11]
    ],
    //访问板的哈希表
    哈希={},
    //统计数字
    节点=0,命中=0;
    函数求解(sol){
    变量x,y,p,s;
    //计算表示当前板的十六进制键
    变量键=
    ((b[0]|(b[1]0).toString(16)+'-'+
    (b[4]|(b[5]0).toString(16);
    node++;
    if(散列[键]){
    //如果已访问此板,请立即中止
    hit++;
    返回false;
    }
    如果(键=='FFFFFF-ffffffff'){
    //如果电路板已完全填满,则返回当前解决方案
    返回溶胶;
    }
    //将板保存在哈希表中
    哈希[键]=真;
    //对于每个位置和每种类型的工件。。。
    对于(y=0;y<7;y++){
    对于(x=0;x<7;x++){
    对于(p=0;p<4;p++){
    //…看看我们能不能在这个位置插入这个零件
    
    如果(!(b[y]&(piece[p][0]@fragilewindows,我将投票拒绝您对该问题提出的编辑,因为即使您进行了改进,它也不会满足堆栈溢出的标准。该问题需要场外资源,应该关闭。