POJ 1731 Orders
2016-09-12 17:00
393 查看
题目链接:http://poj.org/problem?id=1731
题目大意:给你一个不超过200长度的字符串 让你先排序 让字符串中的字符进行全排列 输出按顺序搜出来的全排列的字符串 重复的字符串不需要再次输出
解题思路:其实就一个模板dfs 稍微注意下因为有可能出现相同的字符 所有全排列组成后的字符串不一定不重复 这个地方要注意下
END!!!!!!!!!!!!!!!!!!!!!!!!
题目大意:给你一个不超过200长度的字符串 让你先排序 让字符串中的字符进行全排列 输出按顺序搜出来的全排列的字符串 重复的字符串不需要再次输出
解题思路:其实就一个模板dfs 稍微注意下因为有可能出现相同的字符 所有全排列组成后的字符串不一定不重复 这个地方要注意下
//Memory: 140K //Time: 63MS #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <map> #include <cmath> #include <queue> #include <string> #include <vector> #include <set> #include <stack> using namespace std; #define ll long long #define sc(x) scanf("%d",&x) #define dsc(x,y) scanf("%d%d",&x,&y) #define sssc(x) scanf("%s",s) #define sdsc(x,y) scanf("%s %s",x,y) #define ssc(x,y,z) scanf("%d%d%d",&x,&y,&z) #define pr(x) printf("%d\n",x) #define FOR(i,n,o) for(int i=o;i<=n;i++) #define lcr(a,b) memset(a,b,sizeof(a)) #define Inf 1<<29 const int maxn=205; int n,cnt; char str[maxn],num[maxn]; int vis[maxn]; void dfs(int cur) { char c=0;//注意!!!!!!!!!!! if(cur==n) { printf("%s\n",num); } else { FOR(i,n-1,0) { if(!vis[i]&&c!=str[i]) { num[cur]=c=str[i]; vis[i]=1; dfs(cur+1); vis[i]=0; } } } } int main() { while(~scanf("%s",str)) { lcr(vis,0); n=strlen(str); sort(str,str+n); dfs(0); } return 0; }
END!!!!!!!!!!!!!!!!!!!!!!!!
相关文章推荐
- poj 1731 Orders
- poj 1731 Orders
- POJ 1731 Orders(STL运用)
- poj 1731 Orders(字典树)
- POJ 1731 Orders【生成有重集的全排列1.0】
- POJ1731 Orders【全排列+字符串排序】
- poj 1731 Orders
- POJ-1731-Orders
- poj 1731 Orders
- POJ 1731 Orders(全排列)
- POJ 1731 Orders
- POJ-1731 Orders(排序全排列库函数next_permutation())
- POJ 1731---orders【STL标准模板库】
- POJ 1731 Orders
- poj-1731-Orders
- poj 1731 Orders
- poj 1731 Orders
- POJ 1731 Orders 【STL】
- poj 1731 Orders
- POJ 1731 Orders(不重复全排列)