c - 打印给定元素排列的程序

标签 c algorithm

我最近参加了 ACM 认证的编程竞赛。这是我当时做不到的问题:

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

请告诉我这道题该怎么做。有没有什么算法可以做这类题?

最佳答案

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

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-yates shuffle的想法类似。 ,但在这里 - 不是将 i 处的元素与随机选择的后续元素交换 - 你可以将其与所有元素交换 - 一次每个元素。

关于c - 打印给定元素排列的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13670826/

相关文章:

创建一个产生字符串的 FILE * 流

java - 测试圆顶 : my solution works but I am only getting %50 right and not %100?

c - 将二维数组呈现为树

php - 我需要一个图的数组缩减算法

c - glibc 检测到 : realloc(): invalid next size

python - python3中的段错误(C)

c - 效率 : 8 arrays vs a multidimensional array

javascript - 如何在第二个下划线后剪切字符串?

java - 合并排序中的递归 : two recursive calls

c - 如何用0到20的数字填充数组C语言