poj 1256(Anagram + 求全排列算法)
来源:互联网 发布:端口号20 编辑:程序博客网 时间:2024/06/16 15:42
题目链接:http://poj.org/problem?id=1256
题目意思:一串字符a[15],要求求出所有有这些字符构成的不重复的字符串(全排列问题)
代码借鉴于大牛处:
代码:
#include<stdio.h>#include<string.h>int n,len;int hash[15]={0};char a[54];char ans[15];int dfs(int k){int i,j;for(i=1;i<=52;i++)if(hash[i]>0){hash[i]--;if(i % 2 == 0)ans[k]=i/2+96;else ans[k]=(i+1)/2+64;if(k == len-1){ for(j=0;j<len;j++) printf("%c",ans[j]); printf("\n");}else dfs(k+1);hash[i]++;}return 0;}int main(){int i;scanf("%d\n",&n);while(n--){memset(hash,0,sizeof(hash));scanf("%s",a); len=strlen(a);for(i=0;i<len;i++){if(a[i] >= 'A' && a[i] <= 'Z')hash[(a[i]-64)*2-1]++;elsehash[(a[i]-96)*2]++;} dfs(0);}return 0;}
下面是在求解该题过程中查找的一个“递归求全排列算法”,也贴出来和大家分享下:
递归求全排列算法代码:
#include <stdio.h> inline void Swap(char& a, char& b) {// 交换a和b char temp = a; a = b; b = temp; } void Perm(char list[], int k, int m) { //生成list [k:m ]的所有排列方式 int i; if (k == m) {//输出一个排列方式 for (i = 0; i <= m; i++) putchar(list[i]); putchar('\n'); } else // list[k:m ]有多个排列方式 // 递归地产生这些排列方式 for (i=k; i <= m; i++) { Swap (list[k], list[i]); Perm (list, k+1, m); Swap (list [k], list [i]); } } int main() { char s[]="123"; Perm(s, 0, 2); return 0; }
- poj 1256(Anagram + 求全排列算法)
- poj 1256 深搜全排列 Anagram
- poj-1256 Anagram 全排列
- 一个求全排列的算法
- 求全排列问题的算法
- POJ 1256 Anagram(next_permutation全排列)
- 求全排列的非递归算法
- 求全排列算法简单的实现
- 【算法】求全排列 回溯 交换 DFS JAVA
- 求全排列
- 求全排列
- 求全排列
- 求全排列
- 求全排列
- 求全排列
- 求全排列
- 求全排列
- 求全排列
- Managing Toll-Free Bridging
- Ext中CheckboxSelectionModel让其符合某一条件行不能被选中
- Linux shell 循环读入一个列表 文件 进行操作
- 在Spring与Hibernate集成使用
- C++中连接MySql数据库
- poj 1256(Anagram + 求全排列算法)
- 从windows向虚拟机下的linux系统传送文件
- 4.20
- Linux操作系统下三种配置环境变量的方法
- [转] Python的50个模块,满足你各种需要
- Segment tree
- HSQLDB介绍
- 写代码如坐禅--看看这个时候你该干些什么?
- Java笔试题一