全排列 DFS 模板

void dfs(int step){
 if (step == N+1){  //1. 判断边界
  for (int i = 1; i <= N; i++)
   cout << a[i] << " ";
  cout<< endl;
  return;  //重要!返回之前调用的那次
 }
 for (int i = 1; i <= N; i++){  //2. 尝试各种可能
  if (vis[i] == 0){
   a[step] = i;   //3. 满足条件入值,标记位更新
   vis[i] = 1;
   dfs(step + 1); //4. 开始递归
   vis[i] = 0; //5. 恢复数据, 重要!
  }
 } 
}

posted @ 2017-01-19 14:07  wujixing909  阅读(187)  评论(0编辑  收藏  举报