10张牌隔2张跳,求算法,该怎么解决
10张牌隔2张跳,求算法
10张牌,摆成一排,要求隔2张跳,把牌最终摞成2张一堆
------解决方案--------------------
算法自己写,怎么解都告诉你了
01 23 45 67 89
expand()函数
{
for(里面每个没展开的组合)
{ if(expandLeft(idx))往左展开
return expand();
if(expandRight(idx))往右展开
return expand();
}
返回是否全部展开完毕.
}
第一次进去.
{
展开01,left不可展开,right可以展开
展开后变为0 23 1 45 67 89,记录下展开的位置和方向,继续递归 (0,3)R
展开45 右 0 23 1 4 67 5 89 (4,7)R
展开23 右 0 2 1 4 3 67 5 89 (1 ,4)R
展开67 左 0 2 1 6 4 3 7 5 89 (3,6)L
展开89 左 0 2 1 6 4 3 8 7 5 9(6,9)L
0123456789
第一个解合并顺序
第6和9位置=69, 01234578 69
(3,6)=37, 01245 37 8 69
(1,4)=15, 0 15 2 4 37 8 69
(4,7)=4,8 0 15 2 37 48 69
(0,3)=0,2 随便左右都可以了
}
10张牌,摆成一排,要求隔2张跳,把牌最终摞成2张一堆
------解决方案--------------------
算法自己写,怎么解都告诉你了
01 23 45 67 89
expand()函数
{
for(里面每个没展开的组合)
{ if(expandLeft(idx))往左展开
return expand();
if(expandRight(idx))往右展开
return expand();
}
返回是否全部展开完毕.
}
第一次进去.
{
展开01,left不可展开,right可以展开
展开后变为0 23 1 45 67 89,记录下展开的位置和方向,继续递归 (0,3)R
展开45 右 0 23 1 4 67 5 89 (4,7)R
展开23 右 0 2 1 4 3 67 5 89 (1 ,4)R
展开67 左 0 2 1 6 4 3 7 5 89 (3,6)L
展开89 左 0 2 1 6 4 3 8 7 5 9(6,9)L
0123456789
第一个解合并顺序
第6和9位置=69, 01234578 69
(3,6)=37, 01245 37 8 69
(1,4)=15, 0 15 2 4 37 8 69
(4,7)=4,8 0 15 2 37 48 69
(0,3)=0,2 随便左右都可以了
}