算法实现题 2-8 有重复元素的排列问题

算法实现题 2-8 有重复元素的排列问题

问题描述:

设 R={ r1 ,r2 ,…,rn }是要进行排列的 n 个元素。其中元素r1 ,r2 ,…,rn 可能相同。试设计
一个算法,列出 R 的所有不同排列。

编程任务:

给定 n 以及待排列的 n 个元素。计算出这 n 个元素的所有不同排列。

数据输入:

由文件 input.txt 提供输入数据。文件的第 1 行是元素个数 n,1£n£500。接下来的 1 行
是待排列的 n 个元素。

结果输出:

程序运行结束时,将计算出的 n 个元素的所有不同排列输出到文件 output.txt 中。文件
最后 1 行中的数是排列总数。

输入文件示例

4 
aacc

输出文件示例

aacc 
acac 
acca 
caac 
caca 
ccaa 
6

AC

排序问题【无重复数据】

有重复元素的排列问题------经典题目

#include<bits/stdc++.h>
#include<iostream>
using namespace std;

char xx[9999];
int cnt=0;

int findsame(int k,int m) {
    
    
	for(int i=k; i<m; i++) {
    
    
		if(xx[i]==xx[m])
			return 1;
	}
	return 0;
}
void perm(int k,int m) {
    
    
	if(k==m) {
    
    
		for(int i=0; i<=m; i++) {
    
    
			cout<<xx[i];
		}
		cout<<endl;
		cnt++;
	} else {
    
    
		for(int i=k; i<=m; i++) {
    
    
			if(findsame(k,i))
				continue;
			swap(xx[k],xx[i]);
			perm(k+1,m);
			swap(xx[k],xx[i]);
		}
	}
}

int main() {
    
    
	int n;
	cout<<"请输入元素个数:\n" ;
	cin>>n;
	cout<<"请输入"<<n<<"个不同的元素:\n" ;
	for(int i=0; i<n; i++)
		cin>>xx[i];
	perm(0,n-1);
	cout<<"count="<<cnt;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45745322/article/details/115194874
2-8
今日推荐