c++ 全排列

来源:百度知道 编辑:UC知道 时间:2024/06/08 08:21:14
假设n=4 全排列后有24组排列 从这24种排列中选出四组 分别赋值于4*4数组的每一行 找出所有满足条件的4*4数组
要求:
(1) 24组排列不能申请空间或者全部存于数组中 因为假如n=9,16。。通用性强点
(2) 递归算法实现
原来题目是:n=4的二维数组使其每行每列都只有不重复的1,2,3,4 并且将这个数组分割成四个m=2的二维数组,使分割后的每个二维数组中也只有不重复的1,2,3,4 n=9即分割成9个m=3的二维数组

估计还能优化 就是n=6或者9时就太慢了 因为有(6!)^6个了
只能发个核心代码了,超数字了,呵呵

// 实现全排序
void Matrix::Perm(int k,int m,int l)
{
for (int j =k;j<=m;j++)
{
swap(k,j);
Perm(k+1,m,l);
swap(k,j);
if ( k ==m)
{
k=0;
for(int j=0;j<n;j++)
b[l][j]=a[j];

if(!Check(l))return ;

if(l==m)
{
if(Check(n)&&Check1(h1,h2))
{
if(count%20==0){cout<<"请按任意键继续..."<<endl;getchar();}
count++;
cout<<"符合条件的第"<<count<<"个组合为: "<<endl;
for(int i1=0;i1<n;i1++)
{
for(int j1=0;j1<n;j1+

4*4的数组是什么意思呀?
选择出什么样的四组?
不太懂你的意思。
下面的是一个递归的全排列程序,希望对你有点帮助
#include<iostream>
using namespace std;

template<typename T>
inline void Perm(T &m, T &n)
{
T temp;
temp = m;
m = n;
n = temp;
}

template<typename T>
void All(T list[], int k, int m)
{
if (k == m)
{
for (int i = 0; i <= m; ++i)
{
cout << list[i];
}
cout << endl;
}
else
{
for (int i = k; i <= m; ++i)
{
Perm (list[k], list[i]);
All(list, k + 1, m);
Perm (list[k], list[i]);
}
}
}

int main()
{
int list[] = {1, 2, 3, 4};
All (list, 0, 3);
return 0;
}

如何选出四组?

用STL

解决了 发个代码来分享一下啊

条件是什么