【题目描述】
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。

我们假设对于小写字母有‘a’ <‘b’ < … <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。

【输入】
只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。

【输出】
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S=s1s2…sk,T=t1t2…tk,则S<T等价于,存在p(1<=p<=k),使得s1=t1,s2=t2,…,sp−1=tp−1,sp<tp成立。

【输入样例】
abc
【输出样例】
abc
acb
bac
bca
cab
cba
【提示】
本题目禁止使用STL及包含可以使用的相关调用。

分析

  1. 本题目禁止使用STL,所以不能使用#include <bits/stdc++.h>这个万能头文件,不然会提示不让提交;
  2. 可以参考这个图片,开始有三个坑,可以分别填充a,b,c,也就是说分别由a,b,c开头;第一个字符确定后,再确定第二个字符,最后确定最后一个字符。图片来源
  3. 我们可以想象为把3个字母装进三个盒子里面,利用dfs不断去搜索;

AC代码

#include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
int vis[10];//标记是否已访问
char ans[10];//排列结果
char s[10];//输入的字符串
int len;//原字符串长度
//想象为把这些字母放进len个盒子里
void dfs(int step) {//当前处理第几个盒子//step从0开始的,当step=len-1就已经将盒子装满了,//故进行下一步dfs(step+1)时,直接输出,此时step==len if(step==len) {//盒子已经装满了,递归出口cout<<ans<<endl;return;}for(int i=0; i<len; i++) {if(!vis[i]) {//表示i没有放进盒子里vis[i]=1;//表示i已经放盒子里了,不在手里ans[step]=s[i];//把i放入当前的盒子里dfs(step+1);//处理下一个盒子,搜索到头,然后回溯 vis[i]=0;//回溯,即回收这个已经用过的字母,回到手里 }}
}
int main() {cin>>s;len=strlen(s);dfs(0);return 0;
}

1199:全排列(dfs)相关推荐

  1. 组合数学(全排列)+DFS CSU 1563 Lexicography

    题目传送门 1 /* 2 题意:求第K个全排列 3 组合数学:首先,使用next_permutation 函数会超时,思路应该转变, 4 摘抄网上的解法如下: 5 假设第一位是a,不论a是什么数,ax ...

  2. Leetcode46全排列DFS

    链接 题目大意:给定一个数组,求出所有的全排列. 分析 DFS和回溯的方法. 回溯算法的核心 选择列表:表示当前可做的选择 路径:记录做过的选择 结束条件:遍历到树的底层,在这里是选择列表为空的时候. ...

  3. 第七届蓝桥杯决赛真题 - 凑平方数-全排列+dfs+set去重

    题目: 凑平方数 把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够 办到的.比如:0, 36, 5948721再比如: 1098524736 1, 25, 6390784 0, 4, ...

  4. 全排列 DFS 回溯

    //dfs全排列 #include<stdio.h> #include <string.h> char temp[5] = {'A','B','C','D'};//seed c ...

  5. 全排列—dfs(递归算法手动模拟)

    目录 1.dfs全排列深度优先算法思路导图 2.dfs递归思想 3.主旨展现 4.详解手动模拟 5.例题来喽 5.1例题(1)来喽 5.2例题(2)来喽 5.3例题(3)来喽 1.dfs全排列深度优先 ...

  6. 全排列(dfs、小白、详细解释)

    目录 主函数 用来排序的函数 详细过程 代码 从键盘输入一个没有重复元素的字符串,输出这个字符串所有字符的全排列 输入格式: 一个字符串,输入保证字符串中没有重复的字符,字符串的长度不超过10,字符串 ...

  7. wikioi 1294 全排列 dfs

    1294 全排列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个n, 请输出n的所有全排列 输入描述 Input Desc ...

  8. 信息学奥赛一本通测评网 1199 全排列 递归算法 Dangerise

    老师要求写一篇题解,作为一个十分认真,踏实的学生,就用心的找道简单的题敷衍一下吧. 来看这道题 ​​​​​​信息学奥赛一本通(C++版)在线评测系统 这道题既然在递归算法的标签下,就用递归来做吧. 先 ...

  9. [Leetcode][第60题][JAVA][第k个排列][回溯][DFS][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯搜索算法 + 剪枝 ,直接来到叶子结点 时间复杂度:O(N^2) 空间复杂度:O(N) import java.util.Arrays;public cl ...

  10. 【算法】蓝桥杯dfs深度优先搜索之排列组合总结

    [导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...

最新文章

  1. 关于mtl_transactions_interface表序列
  2. 等重构完这系统,我就辞职
  3. intellij idea 部署项目的时候 图中application context 写不写有什么关系?有什么作用?...
  4. 2017\National _C_C++_C\1.哥德巴赫分解
  5. MyBatis中SQL语句相关内容
  6. 360安全路由器v2处理器_您的路由器有多不安全?
  7. 思科、华为远程登录配置小结
  8. Biobank genetic data探析(一)
  9. R 散点图,添加标签
  10. Arduino之干接点控制继电器取反实例
  11. ZBrush软件中的笔触类型
  12. Lingo学习笔记(二)——常用函数
  13. OC基础 Block
  14. 行业话题 | 天天坐地铁,你知道BIM在地铁中的应用吗
  15. 《MySQL数据库应用技术》
  16. CTF小白新手导航(基础建议)
  17. Vue框架 MIinUI 配置
  18. 计算机是一种工具英语,把计算机作为一种“工具”教给学生
  19. 腾讯 SSL 免费证书申请步骤
  20. js 求最接近5的倍数的值

热门文章

  1. 使用Storage实现登录弹出
  2. Flutter 学习之打包 - 纯Flutter项目生成Android包
  3. 榆林市科技馆项目变电所运维的研究与应用
  4. 一般写入的两个IMEI号和一个MEID号,输入*#06#*后显示遗漏一个IMEI号。
  5. 牛刀杀鸡 Zju 2850解题报告
  6. WebSocket报404错误
  7. android 删除sd卡文件恢复,终于解决sd卡删除的文件如何恢复问题
  8. 【愚公系列】2023年06月 网络安全(交通银行杯)-Android
  9. 罗斯蒙特3051变送器的优势在哪里?
  10. 录像机获取服务器信息失败,监控录像机找不到服务器