发布时间:2026/9/6 14:57:46
生成所有错位排列的算法 所谓N元错位排列就是指对应于1,2,–,N的N元排列Im(m1,2,—,N),满足Im!m算法的目的是构造出所有这样的错位排列依据的基本思想是回溯法在沿栈向下试探的过程中逐步扩大部分错位排列的规模当发现无法找到下一个部分错位排列的元素时就向上回溯继续试探,当当回溯至栈空间首元素且栈空间首元素stack[0]N1时表明首元素为2,–,N的所有错位排列已全部试探得到错位排列生成完毕退出循环。这里给出算法该算法生成对应于1,2,—,N的所有N元错位排列代码(C)#include vector #include iostream using namespace std; #define N 5 //问题规模生成对应于1,2,---,N的所有N元错位排列 int Search(const vectorbool occupy, int i, int j) { for (; i occupy.size(); i) { if (i 1 ! j occupy[i] false) { return i 1; } } return 0; } int main() { vectorint a(N, 0); vectorbool occupy(N, false); //对于栈中已生成的错位排列中的任意值i,occupy[i-1]true,对于1,2---,N中不在错位排列栈中的任意元素i,occupy[i-1]false bool TF true; //循环过程中回溯至本层为false,前进至本层为true int i 0; //存放错位排列的栈的栈顶指针 int count 0; //统计错位排列数 while (true) { if (TF false i 0 a[i] N) break; int temp; if (TF false) occupy[a[i] - 1] false; if (TF true (temp Search(occupy, 0, i 1)) 0 || TF false (temp Search(occupy, a[i], i 1)) 0) { --i; TF false; continue; } else { a[i] temp; occupy[temp - 1] true; } if (i ! a.size() - 1) { i; TF true; } else { count; cout 第 count 个错位排列: endl; for (const int m : a) { cout m ; } cout endl; for (int j 1; j N; j) { cout j ; } cout endl; cout endl; TF false; } } return 0; }运行结果(N5时)

相关新闻

2026/9/6 14:57:46

试解2014ACM大赛赛题守望者逃离荒岛问题

题目如下:恶魔猎手尤迫安野心勃勃.他背叛了暗夜精灵,率深藏在海底的那加企图叛变:守望者在与尤迪安的交锋中遭遇了围杀.被困在一个荒芜的大岛上。为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去&#…

2026/9/6 14:52:46

红黑树详细分析与c++实现

红黑树的删除红黑树删除极其复杂,实现难度比AVL树删除更大,要考虑的各种分支情况繁多,编程实现时在琐碎的细节上容易出错,但只要用心,正确实现删除算法不难对红黑树按对二叉搜索树执行删除的方式执行删除,如果实际删除的节点是红节…

2026/9/6 14:52:46

Trie树的实现

Trie树是保存字符串公共前缀信息的数据结构,可用于字符串多模匹配&#xff0c;普通的非压缩Trie树实现如下第一种实现:每个分支节点使用map标准库容器保存前缀索引#include <map> #include <stack> #include <vector> #include <string> #include <…

2026/9/6 15:47:57

Buzz离线语音转文字:免费本地转录,十分钟上手指南

Buzz离线语音转文字&#xff1a;免费本地转录&#xff0c;十分钟上手指南 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz 你手…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…