2015-06-04

问题简述:

  输出一串字符的全排列,顺序不同于一般的字母序,而是 A<a<B<b......<Z<z。所以应该重写一个比较函数。

  原题链接:http://poj.org/problem?id=1256

解题思路:

  两种方法:

  方法一:简单的深搜 DFS 搜索所有的可能,但是要注意几个连续相同的字符算作一种情况。

  方法二:使用 STL 的 next_permutation 函数可以很方便的生成全排列。

      关于 next_permutation 函数,可以参考:姜南(Slyar)的文章(点击直接跳转) 感谢原作者!

DFS源代码:

  /*
OJ: POJ
ID: 3013216109
TASK: 1256.Anagram
LANG: C++
NOTE: DFS
*/
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std; int n;
char str[],ans[];
int visited[]; bool cmp(char a,char b) {
if(tolower(a)==tolower(b))
return a<b;
else
return tolower(a)<tolower(b);
} void dfs(int t) {
if(t==strlen(str)) {
for(int i=;i<t;i++)
printf("%c",ans[i]);
printf("\n");
return;
}
for(int i=;i<strlen(str);i++) {
if(!visited[i]) {
ans[t]=str[i];
visited[i]=;
dfs(t+);
visited[i]=;
while(i+<strlen(str)&&str[i]==str[i+]) i++;
}
}
} int main()
{
scanf("%d",&n);
getchar();
while(n--) {
memset(visited,,sizeof(visited));
gets(str);
sort(str,str+strlen(str),cmp);
dfs();
}
return ;
}

STL源代码:

  /*
OJ: POJ
ID: 3013216109
TASK: 1256.Anagram
LANG: C++
NOTE: NEXT_PERMUTATION
*/
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std; int n;
char str[]; bool cmp(char a,char b) {
if(tolower(a)==tolower(b))
return a<b;
else
return tolower(a)<tolower(b);
} int main()
{
scanf("%d",&n);
getchar();
while(n--) {
gets(str);
sort(str,str+strlen(str),cmp);
do {
puts(str);
} while(next_permutation(str,str+strlen(str),cmp));
}
return ;
}

POJ 1256.Anagram的更多相关文章

  1. poj 1256 Anagram(dfs)

    题目链接:http://poj.org/problem?id=1256 思路分析:该题为含有重复元素的全排列问题:由于题目中字符长度较小,采用暴力法解决. 代码如下: #include <ios ...

  2. poj 1256 Anagram—next_permutation的神奇应用

    题意:给你一条字符串,让你输出字符串中字符的全排列,输出的顺序要按它给的奇葩的字典序. 题解:要输出全排列,暴力dfs可以过,但要注意题目的字典序以及相同字符的情况.如果用next_permutati ...

  3. poj 2408 Anagram Groups(hash)

    id=2408" target="_blank" style="">题目链接:poj 2408 Anagram Groups 题目大意:给定若干 ...

  4. POJ 1256:Anagram

    Anagram Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18393 Accepted: 7484 Description ...

  5. POJ 2408 - Anagram Groups - [字典树]

    题目链接:http://poj.org/problem?id=2408 World-renowned Prof. A. N. Agram's current research deals with l ...

  6. 1256 Anagram

    题目链接: http://poj.org/problem?id=1256 题意: 根据自定义的字典序: 'A'<'a'<'B'<'b'<...<'Z'<'z' 和输 ...

  7. next_permutation,POJ(1256)

    题目链接:http://poj.org/problem?id=1256 解题报告: 1.sort函数是按照ASC11码排序,而这里是按照 'A'<'a'<'B'<'b'<... ...

  8. poj 2408 Anagram Groups

    Description World-renowned Prof. A. N. Agram's current research deals with large anagram groups. He ...

  9. 【字母全排列】 poj 1256

    深搜   注意与STL模版的去重函数唯一的区别就是有去重. #include <iostream> #include <cstdio> #include <string. ...

随机推荐

  1. protel99与win7兼容问题的解决方案

    一些用户大概都已经把自己的 PC 从 winXP 换到了 win7,在 win7 给我们带来的视觉上的冲击和功能上的更换.也不时的带来了各方面的软件兼容问题 ,而一般上的兼容都可以在 win7 的自动 ...

  2. HDU 3501 Calculation 2

    题目大意:求小于n的与n不互质的数的和. 题解:首先欧拉函数可以求出小于n的与n互质的数的个数,然后我们可以发现这样一个性质,当x与n互质时,n-x与n互质,那么所有小于n与n互质的数总是可以两两配对 ...

  3. How to choose between zombie.js and PhantomJS for automated web testing? [closed]

    How to choose between zombie.js and PhantomJS for automated web testing? [closed] How to choose betw ...

  4. JavaFx初探

    由于项目的须要,实在是没有办法了,试了非常多种方案(RCP,SWT,Flex,Smartinvoke...),终于还是决定開始研究JavaFx...为了给用户更好地体验我们的"智能家居&qu ...

  5. cookieless domain

    概述 什么是cookieless domain?虽然名字中带有cookie,其实完全可以不使用cookie.这只是一种将网页中静态的文本,图片等的域名和主域名相区别开的方法. 主域名难免会使用到coo ...

  6. 文件上传功能 -- jquery.form.js/springmvc

    距离上一篇 文件上传下载样式 -- bootstrap(http://www.cnblogs.com/thomascui/p/5370947.html)已经三周时间了,期间一直考虑怎么样给大家提交一篇 ...

  7. C++ typedef

    C++ typedef 作用:用来定义类型的同义词,用作类型的说明符. 用法:typedef typeName myTypeName; 使用目的:1. 为了隐藏特定类型的实现,强调使用类型的目的.2. ...

  8. 设计模式(十一)代理模式Proxy(结构型)

    1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供 ...

  9. 3.PHP 教程_PHP 语法

     基础的PHP语法 PHP脚本可以放在文档中的任何位置. PHP脚本以<?php开始,以?>结束: <?php //PHP代码 ?> PHP文件的默认文件扩展名是". ...

  10. python安装集成包

    anaconda, 包含各种科学运算包以及astropy.装完它一劳永逸. https://www.continuum.io/downloads