全排列算法是DFS(深度优先搜索)的一个简单入门应用。
假设我们现在给过一个数n, 要求我们输出从1到 n的n个数的所有排列方式。
详细要求可参考codevs中 1294全排列问题。
首先给出程序的主体及各个变量的作用:
#include<stdio.h>
#include<stdlib.h>
int main(void){
int n;
scanf("%d", &n);
int *flag = (int *)malloc(sizeof(int) * (n + 1));
int *result = (int *)malloc(sizeof(int) * (n + 1));
int i;
for(i = 1;i <= n;i++){
flag[i] = 0;
}
int index = 1;
DFS(result, flag, index, n);
return 0;
}
①flag数组标志着第i位数字是否使用,当第i位数字没有使用的时候,flag[i] = 0, 当第i位数字已经被使用的时候, flag[i] = 1。
②result数组包含了要输出的结果。
③index变量代表着当前的第几层(也就是第几位数字)。
④flag数组以及result数组分配n + 1个空间是为了更直观,从数组[1]开始存放值。
接下来给出DFS函数:
void DFS(int *result, int *flag, int index, int n){
int i;
if(index == n +