全排列算法c++实现
来源:互联网 发布:佛教的心知 编辑:程序博客网 时间:2024/06/05 02:41
#include <iostream>using namespace std;//step1: 找出最大活动整数m以及下标int fun(int a[], int b[], int n){int max = -1;int value = 0;for (int i = 0; i<n; i++){if ((b[i] == 0) && (i != n - 1) && (a[i]>a[i + 1]) && (a[i]>value)){max = i;value = a[i];}if ((b[i] == 1) && (i != 0) && (a[i]>a[i - 1]) && (a[i]>value)){max = i;value = a[i];}}return max;}void swap(int a[], int b[], int index, int n){//step2:交换m和其箭头所知向的与其相邻的整数int m = (b[index] == 1) ? (index - 1) : (index + 1);//交换数值int temp1 = a[m];a[m] = a[index];a[index] = temp1;//交换方向int temp2 = b[m];b[m] = b[index];b[index] = temp2;//step3:交换所有满足p>m的整数p的方向for (int i = 0; i<n; i++){if (a[i]>a[m]){b[i] = 1 - b[i];}}}//输出函数void display(int a[], int n){for (int i = 0; i<n; i++){cout << a[i] << "";}cout << endl;}int main(){int n;cin >> n;int*p = (int *)malloc(sizeof(int)*n);int*q = (int *)malloc(sizeof(int)*n);for (int i = 0; i<n; i++){*(p + i) = i + 1;*(q + i) = 1;}display(p, n);int count = 1;while (fun(p, q, n) != -1){int index = fun(p, q, n);swap(p, q, index, n);display(p, n);count++;}cout << "TotalNum: " << count << endl;free(p);free(q);system("pause");return 0;}
#include<iostream>using namespace std;int FindMaxIndex(int a[], int n){int max = -1;for (int i = 0; i<n - 1; i++){if ((a[i]<a[i + 1]) && (i>max)){max = i;}}return max;}int NewValueIndex(int a[], int n, int index){int i;for (i = n - 1; i>index; i--){if (a[i]>a[index])break;}return i;}void swap(int a[], int index1, int index2){int temp = a[index1];a[index1] = a[index2];a[index2] = temp;}void resort(int a[], int index, int n){int r = index + 1;int s = n - 1;while (r<s){int temp = a[r];a[r] = a[s];a[s] = temp;r++;s--;}}void display(int a[], int n){for (int i = 0; i<n; i++){cout << a[i] << "";}cout << endl;}int main(){int n;cin >> n;int*p = (int *)malloc(sizeof(int)*n);for (int i = 0; i<n; i++){*(p + i) = i + 1;}display(p, n);int count = 1;while (FindMaxIndex(p, n) != -1){int j = FindMaxIndex(p, n);int k = NewValueIndex(p, n, j);swap(p, j, k);resort(p, j, n);display(p, n);count++;}cout << "TotalNum:" << count << endl;free(p);system("pause");return 0;}
0 0
- C语言实现全排列算法
- C语言实现的全排列算法
- C语言全排列算法实现
- C语言实现的全排列算法
- 全排列算法实现
- 全排列算法(c语言实现)acm练习
- 全排列算法(Java实现)
- 全排列算法及实现
- 递归算法实现全排列
- 全排列算法【java实现】
- 全排列算法递归实现
- 全排列算法及实现
- 【算法】递归实现全排列
- 全排列算法及实现
- 全排列算法c++实现
- 全排列算法c++实现
- 全排列算法的实现
- 全排列算法的实现
- JRebel 6.0.3 for Intellij IDEA 14.0破解
- 南京市城乡地籍信息一体化管理的几点思考
- java处理日期时间 相加减大全
- 第十七章 高级PERL技巧
- viewpager+viewpagerindicator的使用
- 全排列算法c++实现
- Lua的入门介绍
- UIImageView
- mac ansi99 js版
- 细数20世纪最最伟大的10大算法
- ios笔试
- 30天自制操作系统(1)
- 简析PPC的Device Tree机制
- 手机注册获取短信验证