博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列
阅读量:4578 次
发布时间:2019-06-08

本文共 887 字,大约阅读时间需要 2 分钟。

开始写这个东西的目的是在网上看到了这样一个故事:

  • 今天下午我亲眼目睹了计算机学生是怎样谈恋爱的:上交大GPA第一名某男约了T大计算机系花在五道口华联的哈根达斯吃冰淇淋,结果那男的去了之后就一直在那拿只铅笔写面试代码直到冰淇淋化成水了还在人肉debug。最后系花MM自己去前台付了钱怏怏而去。真是太悲催了…我听到题目是:给定字符串,打印全排列。

去重姑且不论(直接建立一个数组用于去重即可),全排列(递归)算法的思想是:

  1. 长度为N的字符串的全排列,等价于N个长度为N-1的字符串的全排列
  2. 为了实现1,需要将第一个字符不停的后N-1个字符之一进行交换,然后再对长度为N-1的字符串做同样的交换,直到最终不存在没有交换过的部分(当然,一个字符串与自身的交换也视为一种交换)

代码如下:

#include
#include
void swap(char *a,int i,int j){ char temp; temp = a[i]; a[i] = a[j]; a[j] = temp;}int fuck(char *a, int m,int n){ if(m == n) { printf("%s\t",a); } else { int i; for(i = m ; i <= n; i++) { { swap(a,m,i); fuck(a,m + 1,n); swap(a,m,i);//交换完的部分一定要换回来,不然后面就没法处理了 } } }}main(){ char s[10] = "123"; fuck(s,0,2);}

 

转载于:https://www.cnblogs.com/frankliao/p/4374562.html

你可能感兴趣的文章
JAVA8 ConcurrentHashMap 源码分析
查看>>
Codeforces Round #339 (Div. 2) B. Gena's Code
查看>>
贴心的vs 备注提醒功能
查看>>
SQL语句操作文件
查看>>
自我介绍以及关于软件工程的问题
查看>>
struts (一)
查看>>
【新番推荐】工作细胞
查看>>
开发过程中遇到的崩溃信息及原因,崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃崩溃...
查看>>
C#简单的tcpserver
查看>>
提高(Android)开发效率的工具与网站
查看>>
web.xml里welcome-file欢迎页面配置及web.xml简介
查看>>
[转]Fedora8 Linux下安装mapguide
查看>>
你在用MapGuide/Map 3D做什么?
查看>>
bzoj1296 [SCOI2009]粉刷匠
查看>>
Freemarker网页静态化
查看>>
大话重构连载18:最常见的问题
查看>>
使用charles过滤网络请求
查看>>
C# WinForm实现Windows 7 Aero磨砂玻璃效果
查看>>
Java SpringMVC框架学习(一)入门
查看>>
JAVA 多线程和并发学习笔记(四)
查看>>