全排列问题

输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
n(1≤n≤9)
输出
由1~n组成的所有不重复的数字序列,每行一个序列。(每一个数占5个字符)
样例输入
 3
样例输出
    1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1

一种处理数据的常用策略
这里运用dfs搜索回溯的方式解决
当然也可以直接调用全排列函数next_permutation()

复制代码
#include<iostream>

using namespace std;

int ans[10],vis[10],n; 

void DFS(int x)
{
    if(x==n)//边界
    {
        for(int i=0;i<n;++i)
        {
            printf("%5d",ans[i]);
        }
        cout<<endl;
        return;
    }
    for(int i=1;i<=n;++i)
    {
        if(vis[i]==0)//看此数是否已被调用
        {
            vis[i]=1;//标记
            ans[x]=i;
            DFS(x+1);
            vis[i]=0;//回溯
        }
    }
}

int main()
{
    cin>>n;
    
    DFS(0);
    
    return 0;
} 
复制代码

 

posted @   Cirpt  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示