有重复元素的排列问题
2013-09-10 13:10
225 查看
问题描述:设有{r1,r2,...,rn}共n个元素,这n个元素中可能存在重复元素,试设计一个算法,列出这n个元素的不同排列。
问题分析:
#include <stdio.h>
#include <string.h>
int a[4]={1,1,2,2};
int notExists(int index, int left, int right)
{
int flag=1;
for(int i=left;i<index;i++){
if(a[i]==a[index]){
flag=0;
break;
}
}
return flag;
}
void perm(int left, int right)
{
if (left==right){
for(int i=0;i<4;i++)
printf("%d",a[i]);
printf("\n");
}
else{
for(int i=left;i<=right;i++){
if(notExists(i,left,right)){
int temp=a[left];
a[left]=a[i];
a[i]=temp;
perm(left+1,right);
temp=a[left];
a[left]=a[i];
a[i]=temp;
}
}
}
}
void main()
{
perm(0,3);
}
问题分析:
#include <stdio.h>
#include <string.h>
int a[4]={1,1,2,2};
int notExists(int index, int left, int right)
{
int flag=1;
for(int i=left;i<index;i++){
if(a[i]==a[index]){
flag=0;
break;
}
}
return flag;
}
void perm(int left, int right)
{
if (left==right){
for(int i=0;i<4;i++)
printf("%d",a[i]);
printf("\n");
}
else{
for(int i=left;i<=right;i++){
if(notExists(i,left,right)){
int temp=a[left];
a[left]=a[i];
a[i]=temp;
perm(left+1,right);
temp=a[left];
a[left]=a[i];
a[i]=temp;
}
}
}
}
void main()
{
perm(0,3);
}
相关文章推荐
- 重复元素的排列问题
- 算法实现(2)有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 8594 有重复元素的排列问题(递归、字符串匹配)
- 有重复元素的排列问题
- 有重复元素的排列问题
- 递归分治法实现有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- 有重复元素的排列问题
- leetcode 47. Permutations II 全排列问题(去掉重复元素)+递归
- 有重复元素的排列问题
- 8594 有重复元素的排列问题
- Lucky Numbers(排列问题)(数学)(n个数排列且可重复用,元素个数不定)(等比数列)
- 有重复元素的排列问题
- [置顶] 算法笔记 //05_有重复元素的排列问题(针对字母排序)
- 重复元素的全排列问题
- 有重复元素的全排列问题
- 8594 有重复元素的排列问题