DFS思路,1-5数字总共5个 我将结果存放于output数组中,DFS过程中用bool型数组isSelected表示数字X是否已经出现过。 DFS思路: 因为每个数字仅允许出现一次,必须注意到保存现场+恢复现场的问题 。 代码如下: #include <stdio.h> #include <stdlib.h> #include <memory.h> #define MAX 6 /* 将数字1,2,3,4,5的组合全部输出,每个数字仅能出现一次 */ void DFS(int *output, int val, int pos, bool *isSelected) { if(isSelected[val]) // if this number is exist, return return ; output[pos] = val; isSelected[val] = true; // save the scene if(pos == MAX-2) { for(int i=0; i<MAX-1; i++) printf("%d ", output[i]); printf("/n"); isSelected[val] = false; // recover the scene, one way to end this DFS function return ; } for(int i=1; i <MAX; i++) { DFS(output, i, pos+1, isSelected); } isSelected[val] = false; // recover the scene, another way to end this DFS function } int main() { bool isSelected[MAX]; int output[MAX]; for(int i=1; i<MAX; i++) { memset(isSelected, false, sizeof(isSelected)); DFS(output, i, 0, isSelected); } system("pause"); return 0; }