首页 > 代码库 > POJ 1731 Orders
POJ 1731 Orders
题目链接:http://poj.org/problem?id=1731
解析:
全排列的进阶问题,注意判重
使用next_permutation函数自己就不需要考虑了
当然,如果自己手写全排列,判重会消耗太多时间,这里就需要进行部分优化
代码:
<span style="font-size:14px;">#include <iostream> #include <iomanip> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; #define PI 3.1415926 char str[205]; pair<char, int> visit[205]; int cnt; void init(int n){ int i, j; for(i=0; i<n; ++i){ for(j=0; j<cnt&&visit[j].first!=str[i]; ++j); if(j<cnt) visit[j].second++; else{ visit[cnt].first = str[i]; visit[cnt].second = 1; cnt++; } } } void per(int k, int n){ if(k == n){ puts(str); } else{ int i; for(i=0; i<cnt; ++i){ if(visit[i].second){ str[k] = visit[i].first; visit[i].second--; per(k+1, n); visit[i].second++; } } } } int main(){ while(~scanf("%s", str)){ int len = strlen(str); sort(str, str+len); cnt = 0; init(len); per(0,len); } return 0; }</span><span style="font-size:12px;"></span>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。