搜索和图论——DFS—day—22

DFS—暴力搜索
1、按照怎样的顺序搜索
搜索和图论——DFS—day—22_第1张图片
842、排列数字
问题
给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式
共一行,包含一个整数n。

输出格式
按字典序输出所有排列方案,每个方案占一行。

数据范围
1 < = n < = 7 1 <= n <= 7 1<=n<=7

输入样例

3

输出样例

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

完整代码实现

#include 

using namespace std;

const int N = 10;

int n;
int path[N];
bool st[N];

void dfs(int u)
{
    if (u == n)
    {
        for (int i = 0; i < n; i++) cout << path[i] << " ";
        cout << "\n";
        return;
    }
    
    
    
    for (int i = 1; i <= n; i ++)
    if(!st[i]) //查看当前值有没有搜索过
    {
        path[u] = i; //没有就进行搜索
        st[i] = true; //并记录下来已经被用过
        dfs(u + 1);  //深度搜索下一层
        st[i] = false;//搜索完后回溯,并删除记录,重新搜索
    }
}

int main()
{
    cin >> n;
    
    dfs(0);
    
    return 0;
}

你可能感兴趣的:(数据结构与算法学习(C++))