免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: weichuang02
打印 上一主题 下一主题

[算法] 如何用非递归的算法来求解一个"全排列" [复制链接]

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
11 [报告]
发表于 2012-09-18 16:55 |只看该作者
参考STL:nth_element, 实现参考:<<STL源码剖析>>.

本人很久没碰C++, 表示对C++无感.

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
12 [报告]
发表于 2012-09-22 12:16 |只看该作者
cjaizss 发表于 2012-09-18 16:44
正好之前写了个


一个 DFS 能写成这样, 也算是一朵奇葩...

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
13 [报告]
发表于 2012-09-22 12:21 |只看该作者
不知道楼主高中有没学过数学, 全排列怎么算的知道吗 ??

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
14 [报告]
发表于 2012-09-22 12:43 |只看该作者
__BlueGuy__ 发表于 2012-09-22 12:16
一个 DFS 能写成这样, 也算是一朵奇葩...

你写的好,你来写吧

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
15 [报告]
发表于 2012-09-22 13:02 |只看该作者
__BlueGuy__ 发表于 2012-09-22 12:21
不知道楼主高中有没学过数学, 全排列怎么算的知道吗 ??

如果真要开骂,我就开骂了。
我不明白你的逻辑怎么就和常人不一样,没明白你怎么看出LZ的题目和全排列怎么计算有关系的。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
16 [报告]
发表于 2012-09-22 13:10 |只看该作者
cjaizss 发表于 2012-09-22 13:02
如果真要开骂,我就开骂了。
我不明白你的逻辑怎么就和常人不一样,没明白你怎么看出LZ的题目和全排列怎 ...


笑而不语~~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
17 [报告]
发表于 2012-09-22 13:12 |只看该作者
__BlueGuy__ 发表于 2012-09-22 13:10
笑而不语~~

滚吧

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
18 [报告]
发表于 2012-09-22 13:19 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-09-22 13:30 编辑

全排列最直接的解法就是 for循环, 而递归不过是 for循环的简化
高中生都会解的算法,被你写的这么高深, 佩服, 佩服~~

全排列是最简单的 dfs 模型, 人尽皆知

楼主的本质问题是不知道怎么把 递归dfs 转化成 非递归dfs,
也就是说楼主根本没理解 递归dfs, 要不然不可能转化不了, 是个人都会转的~~

还有, 这种小儿科的代码, 我才不屑写呢
还有,楼主的水平实在太菜了, 这都搞不定,~~

笑而不语

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
19 [报告]
发表于 2012-09-22 13:46 |只看该作者
__BlueGuy__ 发表于 2012-09-22 13:19
全排列最直接的解法就是 for循环, 而递归不过是 for循环的简化
高中生都会解的算法,被你写的这么高深,  ...

递归的长什么样啊?请教

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
20 [报告]
发表于 2012-09-22 13:50 |只看该作者
本帖最后由 __BlueGuy__ 于 2012-09-22 13:55 编辑
cjaizss 发表于 2012-09-22 13:46
递归的长什么样啊?请教


好吧

  1. #include <stdio.h>

  2. #define NUM 4
  3. #define MAX_DEPTH 2

  4. int mark[NUM+1] = {0};
  5. int printList[NUM+1] = {0};

  6. void dfs(int depth);

  7. int main(void)
  8. {
  9.     dfs(1);
  10.     return 0;
  11. }

  12. void dfs(int depth)
  13. {
  14.     int i;

  15.     for (i = 1; i <= NUM; i++)
  16.     {
  17.         if (!mark[i])
  18.         {
  19.             mark[i] = 1;

  20.             printList[depth] = i;

  21.             if (depth < MAX_DEPTH)
  22.             {

  23.                 dfs(depth+1);
  24.             }
  25.             else
  26.             {
  27.                 int j;

  28.                 for (j = 1; j <= MAX_DEPTH; j++)
  29.                 {
  30.                     printf("%d ", printList[j]);
  31.                 }

  32.                 printf("\n");
  33.             }

  34.             mark[i] = 0;
  35.         }
  36.     }
  37. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP