简单问题:0-9个数字,任意顺序排列,如何用递归算法遍历所以排列方式??

时间:2021-10-15 04:13:03
不要给我for循环的算法,因为元素增加后就不适用了!

9 个解决方案

#1


放在算法专题区,没人理,借人气,大家帮忙

#2


up

#3


感觉难,不会。

#4


再帮你顶一下。

#5


谢谢,现在转到专题区

#6


再帮你顶一下。

#7



// 这是其中一步的全排列的代码,另外一步较容易做
template<class T>
void Perm(T list[], int k, int m)
{
int i;
if(k==m)
{
for(i=0;i<=m; i++)
cout << list[i] ;
cout << endl ;
}
else
{
for(i=k;i<=m; i++)
{
Swap(list[k],list[i]) ;
Perm(list,k+1,m) ;
Swap(list[k],list[i] ;
}
}
}

template<class T>
Swap(T &a, T&b)
{
T buf = b ;
b = a ;
a = buf ;
}

#8


#define N 10
#include <stdio.h>
int used[N]={0};

void f(int i)
{
   int k;
   if(i>=N)
   {
      printf("\n");
      return;
   }
   for(k=0;k<N;k++)
   {
      if(used[k])continue;
      printf("%d ",k+1);
      used[k]=1;
      f(i+1);   
      used[k]=0;
   }
}

void main()
{
  f(0);
  getchar();

#9


nice

#1


放在算法专题区,没人理,借人气,大家帮忙

#2


up

#3


感觉难,不会。

#4


再帮你顶一下。

#5


谢谢,现在转到专题区

#6


再帮你顶一下。

#7



// 这是其中一步的全排列的代码,另外一步较容易做
template<class T>
void Perm(T list[], int k, int m)
{
int i;
if(k==m)
{
for(i=0;i<=m; i++)
cout << list[i] ;
cout << endl ;
}
else
{
for(i=k;i<=m; i++)
{
Swap(list[k],list[i]) ;
Perm(list,k+1,m) ;
Swap(list[k],list[i] ;
}
}
}

template<class T>
Swap(T &a, T&b)
{
T buf = b ;
b = a ;
a = buf ;
}

#8


#define N 10
#include <stdio.h>
int used[N]={0};

void f(int i)
{
   int k;
   if(i>=N)
   {
      printf("\n");
      return;
   }
   for(k=0;k<N;k++)
   {
      if(used[k])continue;
      printf("%d ",k+1);
      used[k]=1;
      f(i+1);   
      used[k]=0;
   }
}

void main()
{
  f(0);
  getchar();

#9


nice