搜索
查看: 2490|回复: 4

【解决】在使用全排列算法的问题

[复制链接]

13

主题

73

帖子

635

积分

培训班

积分
635
发表于 2013-3-4 10:37:32 | 显示全部楼层 |阅读模式
本帖最后由 leisurely 于 2013-4-1 09:10 编辑

问题是:
请问要怎么样才能把第一次全排列后压入zuhe的数组的内容清空。以便在第二次全排列的时候,不会受到第一次全排列的内容干扰。谢谢。


感谢roger、Maxsl.Meng、stonelive的指点和帮助。
回复

使用道具 举报

9

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2013-3-4 10:52:37 | 显示全部楼层

[code]import console; 数组 = { 1;2;3} console.varDump( "清空前",数组 ) table.pop

  1. import console;

  2. 数组 = { 1;2;3}
  3. console.varDump( "清空前",数组 )

  4. table.pop(数组,#数组)
  5. console.varDump( "清空后",数组 )
复制代码
table.pop(数组,#数组) 可以清空数组
  1. import console;

  2. 数组 = { 1;2;3}
  3. console.varDump( "清空前",数组 )

  4. 数组 = {}
  5. console.varDump( "清空后",数组 )
复制代码
数组 = {} 也可以清空数组
  1. import console;

  2. 数组 = { 1;2;3}
  3. console.varDump( "清空前",数组 )

  4. for(k,v in 数组){
  5.         数组[k] = null;
  6. }

  7. console.varDump( "清空后",数组 )
复制代码
循环也可以清空数组

首先弄清楚什么是数组 - 数组成员的索引必须是自1开始的顺序数值,
其次你的问题根本不是:“数组不能清空”,不要自己想问什么都没搞清楚

评分

参与人数 1银币 +30 收起 理由
leisurely + 30 感谢指点和提醒,已经更改标题,请大牛再指.

查看全部评分

回复

使用道具 举报

13

主题

73

帖子

635

积分

培训班

积分
635
 楼主| 发表于 2013-3-4 11:05:01 | 显示全部楼层

[quote][size=2][color=#999999]roger 发表于 2013-3-4 10:52[/color] [url=forum.php?mo

roger 发表于 2013-3-4 10:52
table.pop(数组,#数组) 可以清空数组数组 = {} 也可以清空数组循环也可以清空数组

首先弄清楚什么是数组 ...

谢谢roger大牛指点和提醒,是我表述有问题,已经更改,并请roger大牛再指点一下这个问题,谢谢。
回复

使用道具 举报

3

主题

12

帖子

334

积分

培训班

积分
334
QQ
发表于 2013-3-4 11:08:03 | 显示全部楼层

有可能是你zuhe这个变量的问题,你可以试试用把zuhe转换为全局变量.(不知道能不能解决你的问题!{:handshake:})

有可能是你zuhe这个变量的问题,你可以试试用把zuhe转换为全局变量.(不知道能不能解决你的问题!

评分

参与人数 1银币 +10 收起 理由
leisurely + 10 谢谢指点,之前有尝试过改为全局的,但是不.

查看全部评分

回复

使用道具 举报

0

主题

28

帖子

388

积分

二级会员

泥水工...

Rank: 3Rank: 3

积分
388
QQ
发表于 2013-3-4 23:56:10 | 显示全部楼层

[i=s] 本帖最后由 Maxsl.Meng 于 2013-3-5 00:18 编辑 [/i] 首先一个低级错误[code]/*#36*/ Pa

本帖最后由 Maxsl.Meng 于 2013-3-5 00:18 编辑

首先一个低级错误
  1. /*#36*/        Pank(list, 1, #arg);//这个arg哪里来的
复制代码
然后我看着你的代码 一阵头晕..
大致修改了下明显错误,代码如下:
  1. io.open();//打开控制台
  2. count = 0;
  3. var zuhe = {};
  4. function Pank(list,k,m){
  5.     if (k == m){
  6.         tab ={};
  7.         for(i=1;m;1){
  8.             table.push(tab,list[ i ])
  9.         }
  10.                 table.push(zuhe,tab[k])
  11.         count = count + 1;
  12.     }
  13.     else{
  14.         for(i=k;m;1){
  15.             Swap(list, k, i);
  16.             Pank(list, k + 1, m);
  17.             Swap(list, k, i);
  18.         }
  19.     }   
  20. }

  21. function Swap(list,a,b){
  22.     temp = list[a];
  23.     list[a] = list[ b ];
  24.     list[ b ] = temp;     
  25. }
  26. var list = {};
  27. var arg = {"1";"11";"111";"1111"}
  28. import console;
  29. for(i=1;#arg){//重复使用这个全排列算法,想在第一次得到全排列后,先把zuhe数组内容清空。
  30.                 list = string.split(arg[i]);
  31.             Pank(list, 1, #list);
  32.             io.print(table.count(zuhe));
  33.             zuhe = {}; //在这里这样清空并不起作用。求解要怎么样才能实现清空zuhe呢?谢谢!
  34.     }       

  35. execute("pause") //按任意键继续
  36. io.close();//关闭控制台
复制代码
这个算法实现其实得到的结果不算正确,正确的递归实现为:
  1. io.open();//打开控制台
  2. count = 0;
  3. var zuhe = {};

  4. function Pank(list,k,m){
  5.     if (k == m){
  6.         tab ={};
  7.         for(i=1;m;1){
  8.             table.push(tab,list[ i ])
  9.         }
  10.                 table.push(zuhe,tab[k])
  11.         count = count + 1;
  12.     }
  13.     else{
  14.         for(i=k;m;1){
  15.             if (list[k] = list[i]&&k!=i) continue ;
  16.             Swap(list, k, i);
  17.             Pank(list, k + 1, m);
  18.             Swap(list, k, i);
  19.         }
  20.     }   
  21. }

  22. function Swap(list,a,b){
  23.     temp = list[a];
  24.     list[a] = list[ b ];
  25.     list[ b ] = temp;     
  26. }
  27. var list = {};
  28. var arg = {"1";"12";"113";"1234"}
  29. import console;
  30. for(i=1;#arg){//重复使用这个全排列算法,想在第一次得到全排列后,先把zuhe数组内容清空。
  31.                 list = string.split(arg[i]);
  32.             Pank(list, 1, #list);
  33.             io.print(table.count(zuhe));
  34.             zuhe = {}; //在这里这样清空并不起作用。求解要怎么样才能实现清空zuhe呢?谢谢!
  35.     }       

  36. execute("pause") //按任意键继续
  37. io.close();//关闭控制台
复制代码

评分

参与人数 1银币 +30 收起 理由
leisurely + 30 神马都是浮云,感谢指点。

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2019-9-19 07:49 , Processed in 0.062500 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表