0
点赞
收藏
分享

微信扫一扫

30天学会基础算法 (组合的输出—暴力枚举) ^9^

芷兮离离 2022-04-26 阅读 31
算法c++dfs

题目链接

题目描述

输入格式

输出格式

输入样例

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

code

#include<iostream>
#include<iomanip>
using namespace std;

int a[50]; //a数组存每一次选的数
bool b[50];
int n, r;

void search(int t)
{
    int i;
    if (t > r) 
    { //如果搜完了就输出a数组
        for (int i = 1; i <= r; i++)
            cout << setw(3) << a[i];//输出宽度为3
        cout << endl;
        return;
    }
    for (int i = 1; i <= n; i++) 
    { //枚举每一个数
        if (!b[i] && i > a[t - 1] || t == 1)//当i没有被使用过且i必须大于前个数但除1之外
        {
            a[t] = i; //将i存入a数组
            b[i] = true;//标记i已被使用
            search(t + 1);//继续搜索
            a[t] = 0;//回溯一步
            b[i] = false;
        }
    }
}

int main()
{
    cin >> n >> r;
    search(1);
    return 0;
}
举报

相关推荐

0 条评论