cpp生成1到n生成全排列的三种方法

news/2025/11/4 21:17:44/文章来源:https://www.cnblogs.com/xht1/p/19191425

要求:按字典序输出1到n的全排列
法一:next_permutation();

include

include

using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a[]={1,2,3,4,5,6,7,8};
do{
for(int i=0;i<8;i++)
{
cout<<a[i];
if(i!=7)cout<<" ";
}
cout<<endl;
}while(next_permutation(a,a+8));
return 0;
}
以一到八为例,使用Stl的algorithm库中的next_permutation()方法,自动生成下一个字典序的全排列,前提是先有一个全排列,所以使用do while循环,先输出最小字典序12345678,如果下一字典序为最大字典序,也就是降序,next_permutation()会返回false,反之返回true,所以循环条件即为next_permutation(),即可按字典序生成1到8的全排列
法二:栈

include

include

include

using namespace std;
struct State{
vector current;
vector rest;
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
stackst;
st.push({{},{1,2,3,4,5,6,7,8}});
while(!st.empty())
{
State s=st.top();
st.pop();
if(s.rest.empty())
{
for(int i=0;i<s.current.size();i++)
{
cout<<s.current[i];
if(i!=s.current.size()-1)
cout<<" ";

        }cout<<endl;continue;}for(int i=s.rest.size()-1;i>=0;i--){vector<int>new_current=s.current;new_current.push_back(s.rest[i]);vector<int>new_rest;for(int j=0;j<s.rest.size();j++){if(j!=i){new_rest.push_back(s.rest[j]);}} st.push({new_current,new_rest});}      }return 0;

}
利用栈先进后出的属性,通过栈保存当前已生成排列和剩余可用数字的状态。如果没有剩余可用数字,那就输出已生成的排列,如果有可用数字,说明排列还没生成完,那就从剩余可选数字中每次拿一个到已生成排列中,形成新的排列,同时更新剩余可用数字,
注意:由于先进后出的属性,想按字典序顺序生成,需要倒序选取,这样小的数字才能先出来
法三:队列

include

include

include

using namespace std;
struct State{
vector current;
vector rest;
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
queueq;
q.push({{},{1,2,3,4,5,6,7,8}});
while(!q.empty())
{
State s=q.front();
q.pop();
if(s.rest.empty())
{
for(int i=0;i<s.current.size();i++)
{
cout<<s.current[i];
if(i!=s.current.size()-1)
cout<<" ";

        }cout<<endl;continue;}for(int i=0;i<s.rest.size();i++){vector<int>new_current=s.current;new_current.push_back(s.rest[i]);vector<int>new_rest;for(int j=0;j<s.rest.size();j++){if(j!=i){new_rest.push_back(s.rest[j]);}} q.push({new_current,new_rest});}      }
return 0;

}
与栈的方法基本一致,区别在于,队列有先进先出的属性,要想按字典序顺序输出,需要升序选取,从小到大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/956048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1815D

诈骗。 核心:万能的性质:异或是不进位加法 考虑 \(m>2\),对于和 \(n\) 同奇偶的 \(x\) 我们直接构造 \(\left\{x, \cfrac{n-x}{2}, \cfrac{n-x}{2}, 0, \cdots \right\}\),对于不同奇偶我们发现这么多东西加起来…

南京大学/NJU 人工智能/AI 计算机系统基础/ICS 编程作业/PA 记录

PA2.3 从这里开始记录。 已经能通过大部分测试用例————除了 hello-str 和 string。观察这两个测试用例究竟是为什么挂了。系统报错是因为超出内存范围,但是根本原因在这之前。

直播带货话术不会写?这个AI指令帮你搞定

本文分享了一个专门用于生成直播带货话术的AI指令,帮助解决直播创作者在话术设计中的常见痛点。文章从实际困境出发,详细介绍了指令的完整结构、使用方法和实际效果,并针对不同产品类型提供了定制化建议。通过结构化…

Java数组——数组的使用

Java数组——数组的使用数组的使用 for循环 For-Each循环————用于打印数组 数组作方法入参 数组作返回值 案例: public class Array_demo04 {public static void main(String[] args) {int [] a = {1,2,3,4,5};//…

NOIP2025加训

CF1610E AmShZ and G.O.A.T. 最少删除元素个数转化为最多保留元素个数。考虑不合法序列的性质。 发现严格大于平均数的元素个数与严格小于平均数元素个数的关系可以与该序列中点位置的数联系在一起,显然的,对于 \(\{…

20232427 2025-2026-1 《网络与系统攻防技术》实验四实验报告

实验环境确认 操作环境:Kali Linux 虚拟机 核心工具:file、exiftool、upx、strings、IDA Pro(需提前安装)、Super巡警脱壳机(Windows 环境辅助) 实验样本:rada 恶意代码样本、crackme1.exe、crackme2.exe、Snor…

Windows 系统下通过 VMware 17 安装 macOS 的教程

Windows 系统下通过 VMware 17 安装 macOS 的教程 首先下载网盘链接内的 VMware17 以及 unlocker426下载并解压 VMware-workstation-full-17.0.0-20800274.ZIP 后双击.exe 文件一路下一步安装即可,最后的“许可证”那…

【Redis】实操:cluster集群部署

单机基于docker部署Redis 3主3从集群Redis Cluster 基于docker-compose的部署 前言 Redis 作为高性能的键值存储,在生产环境中需通过集群方案保障高可用与水平扩展。Redis 提供的三种核心高可用方案:主从模式:一个主…

2025.11.4 - A

今天工程实训和英语,加油

移动通信基站

移动通信基站2G GSM基站学生的尝试使用 *#06# 移动设备标识码详解:SN、MEID、IMEI1、IMEI2SN:产品序列号,用于设备管理(所有设备都有) MEID:CDMA网络设备的唯一识别码(仅CDMA制式设备有) IMEI:GSM/UMTS/LTE网络设…

kaggle提交 名字不是submission.csv的提交方法

1 运行完下载下来再重新上传提交,可以用其它名字(格式对就行) 2 Save Version离线运行完,点击output中的某个csv,点击submit to competition

实用指南:【Nest】登录鉴权

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

程序员修炼之道:从小工到专家-2

读《程序员修炼之道》前半部分,最戳我的不是高深理论,而是满篇的“务实主义”——教你如何在deadline、需求变更、技术债之间,找到最落地的解决方案,而不是追求“完美却无法实现”的理想代码。 书里提到的“原型与…

设计模式--外观模式:简化繁琐环境的统一接口

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

从零实现3D Gaussian Splatting:完整渲染流程的PyTorch代码详解

3D Gaussian Splatting(3DGS)现在几乎成了3D视觉领域的标配技术。NVIDIA把它整合进COSMOS,Meta的新款AR眼镜可以直接在设备端跑3DGS做实时环境捕获和渲染。这技术已经不只是停留在论文阶段了,产品落地速度是相当快…

NOIP2025模拟1

T1:公司的供应链(dag) 思路: 大概就是推出性质但是没写出来。 我们不难发现,对于一个环来说,把环内全部的边删掉是合法的。 然后我们就从一个点开始搜,如果没有环,就把经过的边都标记一下,这是要保留的。然后…

文生视频时代,RustFS如何成为AI资产库的最佳底座?

文生视频时代,RustFS如何成为AI资产库的最佳底座?随着Sora、Pika等文生视频模型引爆2025年AI领域,存储正取代计算成为制约创新的关键瓶颈——处理一段3分钟1080P视频产生的数据量,相当于50万张标准图片的存储需求。…

HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践

核心定位与结论 目标读者 企业网络架构、数据平台与安全合规团队 核心结论 协议选型原则:HTTP 代理:优先用于 Web 爬取与 API 调用等应用层流量 SOCKS5 代理:优先用于多协议、TCP/UDP、长连接或非 Web 流量 架构策略…

NOIP2025 游记

11.4 开坑。考完 CSP 像在坐过山车,T3 随时可以挂 40 分,10 号之前睡不好觉。 上午 dmy,打你大坝。 每次考试摸完鱼,只有暴力分,还要给 pyb 编理由真的太难了。 丝之歌拿到了飞针,代价是掉了一千念珠,没关系每关…

用 CodeBuddy CLI + Prompt,从零到可运行:前后端混合管理强大的系统的高效实战

用 CodeBuddy CLI + Prompt,从零到可运行:前后端混合管理强大的系统的高效实战pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-…