首页 > 代码库 > 深度优先搜索(dfs)

深度优先搜索(dfs)

关于深度优先搜索的总结;

1 dfs 的基本结构: 

void dfs(int x){
if( x 超出边界){
return ;
}else{
for(遍历){
   if(未访问过){
    访问         ;     
    打上标记    ;
dfs(x + 1) ;
去掉标记    ; //极易忘记
   }
}
return; 
}

2 用dfs求全排列: 

本来好好的,结果sizeof(pointer) 就完蛋了。神秘的内存错误,而且还能正常的跑出一个不正常的结果出来。

 想了解sizeof这个小妖精的看这里    http://blog.csdn.net/wzy198852/article/details/7246836#comments

 

 

bool generatePermutations(int x){
int * flags = (int *)malloc(sizeof(int) * (x + 1));
int * ans =  (int *)malloc(sizeof(int) * (x + 1));
memset(flags, 0, sizeof(int) * (x + 1));          // wo bei ken de hao ku a 
memset(ans, 0, sizeof(int) * (x+1));
         dfs(flags, ans, 1, x+1);      

 

    return true;
}
void dfs(int* book, int* ans, int step, int length){
     if(step >= length){
      for(int i=1; i<length; ++i){
      cout << ans[i] << " ";
      }
      cout << endl;
      return ;
     }else{
      for(int i=1; i<length; ++i){
         if(book[i] == 0){
          ans[step] = i;
          book[i] = 1;
          dfs(book, ans, step+1, length);
          book[i] = 0;
         }
      }
     }   
return ; 

 3 我还要继续改下去

深度优先搜索(dfs)