九度OJ 1120:全排列 (DFS)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4471
解决:1139
- 题目描述:
-
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有'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
- 提示:
-
每组样例输出结束后要再输出一个回车。
思路:
DFS可解。注意返回时恢复原来状态。
代码:
#include <stdio.h>
#include <string.h>
//#include <sys/time.h>
//#include <time.h> #define N 7 char s[N];
int n; void array(int begin)
{
int i, j;
if (begin == n-1)
{
//for (j=0; j<n; j++)
// printf("%c", s[j]);
//printf("\n");
printf("%s\n", s);
return;
} //char a[N];
//for (i=0; i<begin; i++)
// a[i] = s[i];
char c;
for (i=begin; i<n; i++)
{
c = s[i];
for (j=i; j>begin; j--)
s[j] = s[j-1];
s[begin] = c;
//printf("s=%s, begin=%d\n", s, begin);
array(begin+1);
c = s[begin];
for (j = begin; j < i; j++)
s[j] = s[j+1];
s[j] = c;
//printf("s=%s, begin=%d\n", s, begin);
}
} int main(void)
{
//struct timeval tv; while (scanf("%s", s) != EOF)
{
//gettimeofday(&tv, NULL);
//printf("%d:%d\n", tv.tv_sec, tv.tv_usec);
n = strlen(s);
array(0);
printf("\n");
//gettimeofday(&tv, NULL);
//printf("%d:%d\n", tv.tv_sec, tv.tv_usec);
} return 0;
} /**************************************************************
Problem: 1120
User: liangrx06
Language: C
Result: Accepted
Time:340 ms
Memory:912 kb
****************************************************************/
九度OJ 1120:全排列 (DFS)的更多相关文章
- 九度OJ 1120 全排列 -- 实现C++STL中next_permutation()
题目地址:http://ac.jobdu.com/problem.php?pid=1120 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
随机推荐
- [LeetCode] Rotate Image n-by-n矩阵顺时针旋转
You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...
- size_t、ptrdiff_t【转】
转自:http://www.cnblogs.com/liulipeng/archive/2012/10/08/2715246.html http://longzxr.blog.sohu.com/196 ...
- fuelgauge
void fg_init(void *queue, void (*bs_fuel_gauge_status)(void)) { fg_init_ready = bs_fuel_gauge_status ...
- LeetCode OJ--Add Two Numbers
http://oj.leetcode.com/problems/add-two-numbers/ 将用链表表示的两个数相加,(2 -> 4 -> 3) + (5 -> 6 -> ...
- vue 权限控制按钮3种样式、内容、以及跳转事件
最近碰到一个因为要根据权限来给一个按钮变成不同功能, 简单写出3个按钮然后用v-if也能实现这个功能,但是在加载页面时,如果延迟过高则会把按钮按照DOM顺序加载出来,这是个很不好的效果 思索了下,把三 ...
- netcore3.0 webapi集成Swagger 5.0
在项目中引用Swashbuckle.AspNetCore和Swashbuckle.AspNetCore.Filters两个dll,在Startup中的ConfigureServices相关配置代码如下 ...
- springboot2.x整合redis实现缓存(附github链接)
本文代码已提交github: https://github.com/LCABC777/Springboot-redis(1)Springboot中使用redis操作的两种方式:lettuce和j ...
- Careercup | Chapter 6
6.2 There is an 8x8 chess board in which two diagonally opposite corners have been cut off. You are ...
- k8s的使用入门
1.kubectl命令就是apiserver的客户端工具,可以实现对nodes资源的增删改查. # 描述一个节点的信息 kubectl describe node k8s-node1 # 查看k8s集 ...
- Java RandomAccessFile类
RandomAccessFile类是Java中操作文件内容功能最强大的类,既可以读,也可以写. RandomAccessFile支持随机访问,可以直接访问文件的任意位置,在文件的任意位置读写数据.如果 ...