プログラムメモ

<<メモ一覧に戻る

再帰で多重ループ

以前WEBLOGで、多重ループは再帰で書ける、と読んで。

ググって、[java]再帰による多重ループを参考に書きました。

深さ優先探索がそもそもで何をしているのか考えます。


#include <iostream>
#include <vector>

// ループ内でどこまで数を回すか。
int N=0;
// 多重ループの数。
int loop=0;
// 開始数字。
int startNum=0;

void printlist(std::vector<int> l){
  for(int i=0;i<l.size();i++){
    std::cout << l[i] << ",";
  }
  std::cout << std::endl;
}

void dfs(std::vector<int> list){
  if(list.size()==loop){
    printlist(list);
    return;
  }
  int x=0;
  if(list.size()==0){
    x=startNum;
  }else{
    x=list[list.size()-1];
  }
  for(int i=x;i<=N;i++){    
    list.push_back(i);
    dfs(list);
    list.pop_back();
  }
  return;
}

int main(int argc,char *argv[]){
  N=10;
  loop=3;
  startNum=0;
  std::vector<int> list;

  dfs(list);
  return 0;
}


<<メモ一覧に戻る