全排列算法递归实现(可重集)
2014-12-02 14:11
239 查看
问题描述:输入t组数据,每组数据输入一个数字k,以及k个数字,输出他们的全排列。
样例输入:1 3
1 2 3
样例输出:1 2 3
代码:
<span style="font-family:Times New Roman;">#include<stdio.h>
#include<math.h>
#include<algorithm>
#define maxn 1000
using namespace std;
void quan(int *p, int *a, int cur, int n)
{
if (cur == n)
{
for (int i = 0; i < n; i++)
printf("%d ",a[i]);
printf("\n");
}
else
{
for (int i = 0; i < n; i++)
if(i==0||p[i]!=p[i-1])
{
int c1 = 0, c2 = 0;
for (int j = 0; j < cur; j++)
if (a[j] == p[i])
c1++;
for (int j = 0; j < n; j++)
if (p[j] == p[i])
c2++;
if (c1 < c2)
{
a[cur] = p[i];
quan(p, a, cur + 1, n);
}
}
}
}
int main()
{
int p[maxn];
int a[maxn];
int n;
int t;
while (scanf("%d", &t)!=EOF)
{
while (t--)
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d",&p[i]);
}
sort(p, p + n);
quan(p, a, 0 , n);
}
}
return 0;
}</span>
参考书籍:《算法竞赛入门经典》-- 刘汝佳
样例输入:1 3
1 2 3
样例输出:1 2 3
代码:
<span style="font-family:Times New Roman;">#include<stdio.h>
#include<math.h>
#include<algorithm>
#define maxn 1000
using namespace std;
void quan(int *p, int *a, int cur, int n)
{
if (cur == n)
{
for (int i = 0; i < n; i++)
printf("%d ",a[i]);
printf("\n");
}
else
{
for (int i = 0; i < n; i++)
if(i==0||p[i]!=p[i-1])
{
int c1 = 0, c2 = 0;
for (int j = 0; j < cur; j++)
if (a[j] == p[i])
c1++;
for (int j = 0; j < n; j++)
if (p[j] == p[i])
c2++;
if (c1 < c2)
{
a[cur] = p[i];
quan(p, a, cur + 1, n);
}
}
}
}
int main()
{
int p[maxn];
int a[maxn];
int n;
int t;
while (scanf("%d", &t)!=EOF)
{
while (t--)
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d",&p[i]);
}
sort(p, p + n);
quan(p, a, 0 , n);
}
}
return 0;
}</span>
参考书籍:《算法竞赛入门经典》-- 刘汝佳
相关文章推荐
- 全排列算法递归实现
- 一个简洁的全排列算法--递归实现
- 排列组合算法的递归实现
- 【算法】快速排序算法(递归实现 从小到大排列) 排序范围(0~n-1) n为数组元素个数
- 全排列问题算法实现--递归
- 全排列算法原理和实现-----用递归方式实现
- 全排列问题算法分析与实现(递归、非递归)
- 全排列算法之非递归实现
- 全排列算法非递归实现和递归实现
- 求数组全排列算法的递归实现
- 全排列算法的递归与非递归实现
- 字符串的全排列非递归实现算法
- 全排列算法递归实现(笔试题)
- 全排列(Perm)的递归实现算法
- 生成排列的非递归实现算法
- 经典递归算法之排列,组合,集合和换零钱, Python yield实现.
- 全排列算法:递归和非递归实现
- 全排列算法递归及STL实现,八皇后问题
- 一些常用算法[数组全排列算法,单链表反转(递归实现),字符串反转,桶排序]
- 全排列算法递归实现(Permutations)