求全排列
题目:
给定整数N,则1,2,3,4...,N是一个排列,求出这样的所有排列。
解决思路:
动态规划思想。
分别以0到N-1作为尾节点,求全排列。
算法:
1. for 循环(i=1:N)
1. 交换第i个和N-1的数据;
2. 递归;
3. 恢复现场:在交换交换第i个和N-1的数据。
C++代码:
#include <iostream> #include <string.h> using namespace std; void myswap(int &a, int &b) { int temp = a; a = b; b = temp; } int count = 0; void func(int*a , int n, int len) { if(n==1) { for(int i = 0;i < len;i++) cout << a[i] << ", "; cout <<endl; count++; } for(int i = 0;i < n;i ++) { myswap(a[i],a[n-1]); func(a,n-1,len); myswap(a[i],a[n-1]); } } static int size = 4; int main() { int a[size]; for(int i = 0;i < size;i ++) a[i]=i; func(a,size,size); cout << count<<endl; return 0; }
JavaScript代码:
<script> var count=0; function begin(n){ var a=[]; for(var i=0;i<n;i++){ a[i]=i+1; } recu(a,n); } function swap(a,i,j){ var temp=a[i]; a[i]=a[j]; a[j]=temp; } function recu(a,n){ if(n<=1)document.writeln("<b>"+(++count)+"</b> "+a+"<br />"); else for(var i=0;i<n;i++){ swap(a,i,n-1); recu(a,n-1); swap(a,i,n-1); } } begin(5); </script>
结果:
鸣谢:http://blog.csdn.net/yimengqiannian(以上js代码由yimengqiannian提供)
版权声明:本文为博主原创文章,未经博主允许不得转载。