一尘不染

程序打印给定元素的排列

algorithm

我最近参加了ACM认证的编程竞赛。这是我当时无法解决的问题:

“给出一个包含n个元素的整数数组,编写一个程序来打印所有排列。”

请告诉我该怎么做。有没有算法可以解决此类问题?


阅读 174

收藏
2020-07-28

共1个答案

一尘不染

假设没有重复:只需更改每个元素及其后的所有可能元素,然后递归调用该函数即可。

void permute(int *array,int i,int length) { 
  if (length == i){
     printArray(array,length);
     return;
  }
  int j = i;
  for (j = i; j < length; j++) { 
     swap(array+i,array+j);
     permute(array,i+1,length);
     swap(array+i,array+j);
  }
  return;
}

您可以在ideone上查看具有辅助功能swap()printArray()基本测试用例的代码

奖励 :这类似于fisher-yatesshuffle的想法,但是在这里-
意味着要交换at元素i与随机选择的后续元素-一次将其与所有它们交换。

2020-07-28