#include <iostream>
#include <cstring>using namespace std;char chars[] = {'a', 'b', 'c'};char result[3];int flag[3] ; // 用于标记是否使用过int len;// 注意,为了打印,这个函数需要接受一个结果数组,来记录每次递归把那个字符放进去了void show(int index){ int i; for(i = 0; i < len; i ++) cout << result[i] << " "; cout << endl;}void DFS(int index){ int i; if(index == len) show(len); // 找到结果,打印 for(i = 0; i < len; i ++) if(!flag[i]) // 没有使用过 { flag[i] = 1; // 标记为已经使用过 result[index] = chars[i]; // 将这次找的结果放进去 DFS(index + 1); // 找下一位 flag[i] = 0; // 回溯 } // 当函数从for循环中出来的时候,证明当前这一位所有的可能性都找完了,那么会回到上一位的递归}int main()
{ memset(flag, 0, sizeof(flag)); len = sizeof(chars) / sizeof(char); DFS(0); return 0;}