以前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;
}