P1157 组合的输出
日期:2019/10/9
星级:普及-
原题传送门
一道经典的DFS
这题简单的地方就是它需要按顺序输出,不需要回溯;
也就是说;只输出 1 2 3
不输出 1 3 2
也就是后面的数永远比前面的数字大(至少大1;
所以就有了下面的写法
for(int i = b[t-1]+1; i <= num; i++){ //注意这里的写法
b[t]=i;
dfs(t+1);
}
没有回溯,没有判断
→
AC code
#include<bits/stdc++.h>
using namespace std;
int num,r,b[50];
void dfs(int t){ //dfs
if(t==r+1){
for(int i = 1; i <= r; i++)
printf("%3d",b[i]); //场宽的写法!! 场宽不加空格
printf("\n");
return ;
} //够了就输出
for(int i = b[t-1]+1; i <= num; i++){ //注意这里的写法
b[t]=i;
dfs(t+1);
}
}
int main(){
scanf("%d %d",&num,&r);
dfs(1);
return 0;
}