桐桐的组合 - UPCOJ 3597 - DFS深度搜索
2017-07-28 01:30
309 查看
题目:
题目描述排列与组合是常用的数学方法,桐桐刚刚学会了全排列,就想试试组合,组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。
输入
两个整数n和r(1≤r≤n≤20)。
输出
输出所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
样例输入
5 3
样例输出
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
思路:
和用深度搜索输出全排列类似,类比着写,注意后一项一定大于前一项就OK。实现:
// // main.cpp // L // // Created by LucienShui on 2017/7/15. // Copyright © 2017年 LucienShui. All rights reserved. // #include <bits/stdc++.h> using namespace std; #define maxn 27 int a[maxn],n,r; bool vis[maxn]; void dfs(int cur) { if(cur == r) { for(int i=0 ; i<r ; i++) printf("%3d",a[i]); putchar('\n'); } else { for(int i=1 ; i<=n ; i++) { bool flag = true; for(int j=0 ; j<cur && flag ; j++) { if(a[j] == i) flag = false; } if(flag) { if(i<a[cur-1]) continue; a[cur] = i; dfs(cur+1); } } } } int main (int argc, char* argv[]) { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> r; dfs(0); return 0; }
相关文章推荐
- nyoj 部分和问题(深度优先搜索DFS)
- 深度优先搜索--DFS
- 深度优先搜索 dfs Oil Deposits HDU - 1241
- 22.基于 邻接表 表示的 深度优先搜索dfs 和 广度优先搜索bfs
- Smallest Difference (dfs)深度搜索
- hdu 4337 King Arthur's Knights【dfs 深度搜索】
- 由SWUSTOJ 0032浅谈DFS深度优先搜索
- DFS--深度优先搜索
- 深度优先搜索 DFS
- sdut 3469 深度优先搜索练习之神奇的矩环(DFS)
- 深度优先搜索DFS——图邻接矩阵表示
- dfs深度优先搜索 1~N 的排列理解dfs,抽象为n个数放n个盒子
- DFS深度优先搜索
- 深度搜索DFS-Lake Counting(POJ NO.2386)
- nyoj 部分和问题(深度优先搜索DFS)
- leetcode 98. Validate Binary Search Tree DFS深度优先搜索 + 两个递归函数 + 一个错误做法
- DFS深度优先搜索之走迷宫
- DFS深度优先搜索案例:马戏团叠罗汉
- 深度优先搜索 DFS
- DFS搜索排列与组合