全排列问题
输出自然数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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现