您的位置:首页 > 其它

POJ 1731 Orders

2016-09-12 17:00 393 查看
题目链接:http://poj.org/problem?id=1731





题目大意:给你一个不超过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!!!!!!!!!!!!!!!!!!!!!!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: