近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法。

问题是这种

用递归实现 n 个元素的全排列。

当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,…,rn) = f(ri U {r1, r2,….,rn}) = U (ri & f(r1,r2, …, rn)), 当时应该是听懂了,只是如今看到这个笔记。又醉了。

(这货竟然是我上课记的笔记 。。。。

。。

。)

后来自己细致想想,事实上非常简单的 一个问题, 利用回溯法,把问题看成是一个排列树。能够非常easy的解决。

以下放出原码。 这是用C实现的, 实在是懒得用C++了。

// =====================【全排列 】==================
// @ author : zhyh2010
// @ date : 20150606
// @ version : 1.0
// @ description :
// =====================【全排列】================== #include <stdio.h>
#include <stdlib.h> #define NUM 4
char arr[NUM] = { 0 }; int m_solution_num = 0; void init()
{
for (int i = 0; i != NUM; i++)
{
arr[i] = 'A' + i;
}
} void output()
{
printf("第%d组解为:\n", ++m_solution_num);
for (int i = 0; i != NUM; i++)
{
printf("%c\t", arr[i]);
}
printf("\n");
} void swap(char * a, char * b)
{
char aa = *a;
char bb = *b; aa = aa ^ bb;
bb = aa ^ bb;
aa = aa ^ bb; *a = aa;
*b = bb;
} void solve(int curpos)
{
if (curpos >= NUM)
{
output();
return;
} // 原来写的是0, 这里应该是curpos
for (int i = curpos; i != NUM; i++)
{
swap(&arr[curpos], &arr[i]);
solve(++i);
--i;
swap(&arr[curpos], &arr[i]); }
} void main()
{
init();
solve(0);
}

生成n个元素的全排列 C实现的更多相关文章

  1. 表单组件 form fastadmin(生成表单元素)

    Form组件 定义文件位置: /extend/fast/Formphp 通用参数 $name 通常为我们组件的名称(name属性值),我们在后台接收时可以通过这个名称来获取到它所对应的值 $value ...

  2. 【模板】 全排列 && 有重复元素的全排列

    全排列 #include<bits/stdc++.h> using namespace std; ]; void print (int n){ ;i<=n;i++) cout< ...

  3. Concise and clear CodeForces - 991F(dfs 有重复元素的全排列)

    就是有重复元素的全排列 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace ...

  4. poj3421 X-factor Chains(重复元素的全排列)

    poj3421 X-factor Chains 题意:给定正整数$x(x<=2^{20})$,求$x$的因子组成的满足任意前一项都能整除后一项的序列的最大长度,以及满足最大长度的子序列的个数. ...

  5. 紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)

    我一开始以为有什么很牛逼的方法来做,然后一直没有思路 后来看了https://blog.csdn.net/zju2016/article/details/78562932的博客 竟然是暴搜?????? ...

  6. Iphone上对于动态生成的html元素绑定点击事件$(document).click()失效解决办法

    在Iphone上,新生成的DOM元素不支持$(document).click的绑定方法,该怎么办呢? 百度了N久都没找到解决办法,在快要走投无路之时,试了试Google,我去,还真找到了,歪国人就是牛 ...

  7. 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置

    zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...

  8. jQuery为动态生成的select元素添加事件的方法

    项目中需要在点击按钮时动态生成select元素,为防止每次点击按钮时从服务器端获取数据(因为数据都是相同的),可以这样写代码 1.首先定义全局js变量 var strVoucherGroupSelec ...

  9. 剑指 Offer 38. 字符串的排列 + 无重复元素的全排列

    剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列, ...

随机推荐

  1. kubernetes API Server安全

    用户访问API Server(以下简称Server),K8S的安全检查步骤:认证和授权. 认证解决用户是谁的问题,就是验证用户名密码;授权解决用户能做什么的问题,就是检查该用户是否拥有权限访问请求的资 ...

  2. 设计模式之策略模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern /** * 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改. ...

  3. ruby ide

    uby 是个动态面向对象.通用的编程语言.它支持多种编程范式,包括面向功能和面向对象.同时它也包括一个动态类型系统和自动内存管理. 编辑器和集成开发环境(IDE)有些不同,编辑器是用来添加,编辑,查看 ...

  4. ElasticSearch 专业术语

    1.Analysis(分析) 分析的过程就是将全文(full text)转换成 术语/分词(terms). 这取决于使用那个分析器,这些短语:“FOO BAR”, “Foo-Bar”, “foo,ba ...

  5. JWT笔记(2)

    上文对JWT模块进行了一个简单的分析.这篇文章稍微做出一些深入的了解. 一,Header篡改攻击 因为JWT的Header是强制有效并且是明文传输(Base64URL编码,几乎等同于明文).那么恶意用 ...

  6. 修改MySQL数据库存储位置datadir

    2017-04-14 1.找到mysql安装目录,默认是C:/ProgramData/MySQL/MySQL Server 5.1,找到my.ini.如果这个文件没有,自己建一个my.ini. 2.假 ...

  7. javascript 冒泡排序算法

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  8. HDU 3732 Ahui Writes Word(多重背包)

    HDU 3732 Ahui Writes Word(多重背包) http://acm.hdu.edu.cn/showproblem.php? pid=3732 题意: 初始有N个物品, 每一个物品有c ...

  9. 谈谈IIS与ASP.NET管道

    作为一个Asp.Net平台开发者,非常有必要了解IIS和Asp.Net是如何结合,执行我们的托管代码,以及Asp.Net管道事件的. 本节目录 IIS 5.X IIS 6 IIS 7+ 集成模式 As ...

  10. devpress grid表格自适应列宽的问题

    /// <summary> /// 自适应列宽,显示横向滚轴,只有当所有列都已经在界面上加载完成之后才能生效 /// </summary> public void setAut ...