全排列问题(递归)

上次上课老师讲了全排列算法,现在刚刚看自己的写的全排列算法,看了好一会才看懂。。。。

应该是自己理解的不够彻底

所以今天彻彻底底的来分析一下

先看图:

思路:

先固定一个字符,然后将固定的字符与它后面的每一个进行交换,一直递归下去,直到固定的字符后面只有一个字符

我们先看看图,框外面的字符是被固定的字符,框里面的字符的没有被固定的字符,具体做法就是每次将框里面的第一个字符与框里面的字符交换(框里面第一个与第一个交换,第一个与第2个交换,第一个与第3个交换.........第1个与第n个交换),直到框里面只剩下一个字符的时候,输出此时的字符排列,但是输出之后又要将字符的位置还原会来。。。(我觉得我讲的有点不太好理解),所以外面现在直接来对图分析吧

假设有abc三个字符,求全排列

看第0层,abc三个字符都在框里面,所以将第一个字符a和第一个字符,第二个字符,第三个字符交换得到:abc,bac,cba,这三个字符串构成了第1层,现在第一层的框里面还有两个字符,所以外面应该继续递归,直到框里面还剩下一个字符就输出这个字符串,所以第一层的abc字符串bc还在框里面,所以将b和b交换,将b和c交换,一共两种情况,(框里面第一个与第一个交换,第一个与第2个交换,第一个与第3个交换.........第1个与第n个交换,一共n种情况)

全排列可以看做固定前i位,对第i+1位之后的再进行全排列,比如固定第一位,后面跟着n-1位的全排列。那么解决n-1位元素的全排列就能解决n位元素的全排列了

代码如下:

#include<string.h>
#include<stdio.h>
int k=0;
char a[100];
long long count=0;//全排列个数的计数
void s(char a[],int i,int k)//将第i个字符和第k个字符交换
{char t=a[i];a[i]=a[k];a[k]=t;
}
void f(char a[],int k,int n)
{if(k==n-1)//深度控制,此时框里面只有一个字符了,所以只有一种情况,所以输出
    {puts(a);count++;}int i;for(i=k;i<n;i++){s(a,i,k);f(a,k+1,n);s(a,i,k);//复原,就将交换后的序列除去第一个元素放入到下一次递归中去了,递归完成了再进行下一次循环。这是某一次循环程序所做的工作,这里有一个问题,那就是在进入到下一次循环时,序列是被改变了。可是,如果我们要假定第一位的所有可能性的话,那么,就必须是在建立在这些序列的初始状态一致的情况下,所以每次交换后,要还原,确保初始状态一致。
    }
}
int main()
{gets(a);int l=strlen(a);//字符串长度
    f(a,k,l);printf("全排列个数:%lld\n",count);return 0;
}

有任何不足错误的地方欢迎拍砖指正哦!!!!!

技术在于分享

 

转载于:https://www.cnblogs.com/yinbiao/p/8684313.html

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

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

相关文章

asp mysql 连接字符串,在ASP中连接数据库(连接字符串)

一、存取数据库的原理在ASP中&#xff0c;用来存取数据库的对象统称ADO对象(Active Data Objects)&#xff0c;主要含有三种对象&#xff1a;Connection、Recordset和Command&#xff0c;其中Connection负责打开或连接数据库&#xff0c;Recordset负责存取数据表&#xff0c;Co…

Windows 7/Vista 桌面上为何有两个隐含的 Desktop.INI

笔者今天在微软中文论坛看到有人又问起一个不算新问题的问题&#xff1a;当我们通过 Windows 7/Vista 的文件夹 选项设置允许显示隐含的文件后&#xff0c;会在 Windows 7/Vista 桌面上看到两个同名的 Desktop.INI 隐含文件&#xff1b; 而在 Windows XP 中允许显示隐含的文件却…

@Autowired @Resource @Inject 自动注入

一、AutoWired ( spring 的注解 )自动注入 /*** Autowired:* 默认按照 Student 类型去容器中找对应的组件:applicationContext.getBean(Student.class);* 如果找到多个相同类型的组件&#xff0c;再将 student 这个属性名作为 id 去容器中找对应组件 applicati…

峰Redis学习(8)Redis 持久化AOF方式

第三节&#xff1a;Redis 的持久化之AOF 方式       AOF方式&#xff1a;将以日志&#xff0c;记录每一个操作优势&#xff1a;安全性相对RDB方式高很多&#xff1b; 劣势&#xff1a;效率相对RDB方式低很多&#xff1b; 1&#xff09;AOF方式需要配置&#xff1a; # Ple…

移动web开发框架之我见

目前开发移动程序框架选择很多&#xff0c;从Web App&#xff0c;到PhoneGap&#xff0c;Titanium&#xff0c;MonoTouch&#xff0c;再到Native App&#xff0c;总有一款适合你。规律是&#xff0c;兼容性越强的技术&#xff0c;成本越低&#xff0c;性能越差&#xff1b;兼容…

php内核介绍及扩展开发指南,4.5. 发布扩展信息

发布扩展信息扩展可以发布 phpinfo() 或反射API要求的信息。我们一起来看一下。本章不会太长&#xff0c;因为真的很简单。MINFO( ) 挂钩如果声明了&#xff0c;一切都在声明的 MINFO() 挂钩中进行。如果未声明&#xff0c;则引擎将运行默认功能以打印有关扩展名的信息。该功能…

2011年度中国地区网络安全威胁大事记

2011年6月28日晚20时左右&#xff0c;新浪微博突然爆发“病毒”&#xff0c;大批用户中招&#xff0c;“中毒”用户点击恶意链接后便并自动关注一位名为hellosamy的用户&#xff0c;之后开始自动转发微博和私信好友来继续传播恶意地址。不少认证用户中招&#xff0c;也导致该“…

ansible模块介绍

ansible 默认提供了很多模块来供我们使用。在 Linux 中&#xff0c;我们可以通过 ansible-doc -l 命令查看到当前ansible 都支持哪些模块&#xff0c;通过 ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。 下面介绍比较常用的几个模块 copy模块file模块cron模块gr…

matlab迭代次数,怎么知道程序中的迭代次数呢

function [result,x,y]TS_BS1(num_1,num_2,c_i,d_j,M_i,T)%初始参数设置runcount 0;tabulength 3 num_1;candidate.x round(rand(1,num_1));y zeros(num_1,num_2);sum_d 0;for i 1:num_2sum_d sum_d d_j(i);endalfa 0.9;%初始化禁忌表for i 1:tabulengthtabulist(i)…

使用a标签调用手机系统的一些小技巧(打电话、发短信)

拨打电话&#xff1a; <a href"tel:181181181181">call me!</a> 号码前加“”&#xff0c;表示国际号码 <a href"tel:110">110</a> 发送短信&#xff1a; <a href"sms:123456789">给123456789发短信</a> …

ecshop api.php,api.php

/*** ECSHOP OPEN API统一接口* * 版权所有 2005-2011 商派网络&#xff0c;并保留所有权利。* ecshop.com* ----------------------------------------------------------------------------* 这不是一个自由软件&#xff01;您只能在不用于商业目的的前提下对程序代码进行修改…

Ajax乱码解决方案

2019独角兽企业重金招聘Python工程师标准>>> 方案1: 页面端: <% page language"java" contentType"text/html; charsetgb2312" pageEncoding"gb2312"%> http://www.w3.org/TR/html4/loose.dtd"> Ajax: function ve…

关键词联想关联 php,ECSHOP商品关键词模糊分词搜索插件,商品列表关键字加红功能...

各位ECSHOP网店系统用户大家好&#xff0c;欢迎来到ECSHOP商品关键词模糊分词搜索商品列表关键字加红功能。最近给客户做一个ECSHOP商城&#xff0c;发现ECSHOP的模糊搜索要求太高&#xff0c;需要加入and、空格、加号等&#xff0c;客户搜索的时候不可能这样操作。考虑到工期的…

花里胡哨,不协调统一的界面,正如看到一个穿花里胡哨衣服的人,让人作呕,不想接近。...

2019独角兽企业重金招聘Python工程师标准>>> 花里胡哨&#xff0c;不协调统一的界面&#xff0c;正如看到一个穿花里胡哨衣服的人&#xff0c;让人作呕&#xff0c;不想接近。 不要瞎变。 转载于:https://my.oschina.net/dongming/blog/40569

python全栈学习--day12(函数高级应用-带参数的装饰器,多个装饰器装饰一个函数)...

函数的执行时&#xff0c;*打散 函数的定义时&#xff0c;*聚合 from functools import wrapsdef wrapper(f):wraps(f)def inner(*args,**kwargs):执行函数之前的相关操作ret f(*args,**kwargs)执行函数之后的相关操作return retreturn inner wrapper def func1(*args):print…

Java学习总结 16个亮点

1.八大基本数据类型 byte(字节型8) int(整型;32;程序中一般默认为int型) short(短整型 16) long(长整型 32) float(浮点型 32) double(双精度浮点型 64) char(字符型 16) boolean(布尔型 只有true和false) 小范围内的整数类型可以通过赋值转化成大范围的数据类型.而大…

PHP聊天记录内啥,PHP的PSR系列轨范都有啥内容

PHP的PSR系列规范都有啥内容PSR是PHP Standard Recommendation的简写&#xff0c;它其实应该叫PSRs&#xff0c;即系列推荐标准&#xff1a;目前通过的规范有PSR-0(Autoloading Standard)、PSR-1(Basic Coding Standard)、PSR-2(Coding Style Guide)、PSR-3(Logger Interface)、…

选择排序法对数组进行排序

package selectionSort;import java.util.Arrays;public class Exam { //使用选择排序法对数组进行排序public static void main(String[] args) {int[] nums {23,3453,123,54,12,45,145,135,656,146,65};SelectionSort(nums);System.out.println(Arrays.toString(nums));}publ…

唐骏给李开复泼冷水:创业不可复制

东方企业家》十月刊刊登我主持的唐骏专栏&#xff0c;发表评创业热潮的冷思考。 题&#xff1a;创业是不可复制的 李开复从谷歌辞职&#xff0c;投身到创业热潮之中。很多媒体朋友问我&#xff0c;如何评价开复的辞职和创业?对此我一概未作回答。其实我很关注&#xff0c;也引…

爬取校园新闻首页的新闻

1. 用requests库和BeautifulSoup库&#xff0c;爬取校园新闻首页新闻的标题、链接、正文。 import requests from bs4 import BeautifulSoup url requests.get("http://news.gzcc.cn/html/xiaoyuanxinwen/")url.encoding "utf-8" soup BeautifulSoup(…