Java教程

DFS -1

本文主要是介绍DFS -1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

从 1 $\sim $ n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。

输入格式

输入一个整数 n。

输出格式

每行输出一种方案。

同一行内的数必须升序排列,相邻两个数用恰好 111 个空格隔开。

对于没有选任何数的方案,输出空行。

本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。

数据范围

1 ≤ n ≤15

输入样例:

3

输出样例:

3
2
2 3
1
1 3
1 2
1 2 3

1)非升序暴力:

点击查看代码
#include <bits/stdc++.h>

using namespace std;

const int N = 140;

int n,a[N];
bool st[N];

void dfs(int x,int hole) // cnt  current time print how long 
{
    if( x > hole )
    {
        for(int i = 1; i <= hole ; i++)
        {
            cout << a[i] << ' ';
        }
        cout << endl;
        return ;
    }
    for(int i = 1 ; i <= n ; i ++)
    {
       if(!st[i])
       {
           st[i] = true;   a[x] = i; 
           dfs(x + 1,hole);
           st[i] = false;  a[x] = 0;
       }
    }
}

int main()
{
    cin >> n;
    cout << endl;
    for(int i = 1 ; i<= n; i++)
        dfs(1,i);
    
    return 0;
}
这篇关于DFS -1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!