题目

分析:这个题的数据范围很小,直接打印全排列去判断也能过,但是这里存在两个剪枝,第一个,如果当前的距离已经大于前面距离的最小值,则剪枝,还有一个就是如果与当前结点相连的边数大于等于前面距离的最小值,则剪枝

 #include "iostream"
#include "cstdio"
#include "cstring"
#include "string"
#include "map"
#include "set"
#include "vector"
#include "algorithm"
#include "cmath"
using namespace std;
const int INF=;
const int maxn=;
char a[maxn];
char t[maxn];
string s;
int minx;
map<char,string>mp;
void dfs(int cur,char B[],char vis[],vector<char> &c,int n){
if(cur==n){
int maxn=;
int flag=;
for(int i=;i<n;i++){
for(int j=;j<(int)mp[B[i]].length();j++){
int pos;
for(int k=;k<n;k++){
char ch=mp[B[i]][j];
if(B[k]==mp[B[i]][j]){
pos=k; break;
}
}
maxn=max(maxn,abs(pos-i));
if(maxn>minx){
flag=; break;
}
}
if(flag) break;
}
if(maxn<minx&&!flag){
minx=maxn;
c.clear();
for(int i=;i<n;i++)
c.push_back(B[i]);
}
}else{
for(int i=;i<n;i++){
int ok=;
for(int j=;j<cur;j++)
if(vis[i]==B[j]){
ok=; break;
}
if(!ok){
B[cur]=vis[i];
dfs(cur+,B,vis,c,n);
}
}
}
} int main()
{
while(cin>>s)
{
if(s[]=='#') break;
int len=s.length();
int i=;
set<char> str;
while(i<len){
char ch;
while(i<len&&s[i]!=':'){
ch=s[i];
str.insert(ch);
i++;
}
i++;
while(i<len&&s[i]!=';'){
mp[ch]+=s[i];
str.insert(s[i]);
i++;
}
i++;
}
set<char>::iterator set_iter=str.begin();
int k=;
for(;set_iter!=str.end();set_iter++){
a[k++]=*set_iter;
}
minx=INF;
vector<char> Q;
dfs(,t,a,Q,k);
for(int i=;i<Q.size();i++){
printf("%c ",Q[i]);
}
printf("-> %d\n",minx);
for(int i=;i<k;i++)
mp[a[i]]="";
}
}

UVA140 剪枝的更多相关文章

  1. UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理

    给出一个图,找出其中的最小带宽的排列.具体要求见传送门:UVa140 这题有些小技巧可以简化代码的编写. 本题的实现参考了刘汝佳老师的源码,的确给了我许多启发,感谢刘老师. 思路: 建立双射关系:从字 ...

  2. Uva140 Bandwidth 全排列+生成测试法+剪枝

    参考过仰望高端玩家的小清新的代码... 思路:1.按字典序对输入的字符串抽取字符,id[字母]=编号,id[编号]=字母,形成双射       2.邻接表用两个vector存储,存储相邻关系     ...

  3. UVa140 Bandwidth 【最优性剪枝】

    题目链接:https://vjudge.net/contest/210334#problem/F  转载于:https://www.cnblogs.com/luruiyuan/p/5847706.ht ...

  4. UVA-140 Bandwidth (回溯+剪枝)

    题目大意:求一个使带宽最小的排列和最小带宽.带宽是指一个字母到其相邻字母的距离最大值. 题目分析:在递归生成全排列的过程中剪枝,剪枝方案还是两个.一.当前解不如最优解优时,减去:二.预测的理想解不必最 ...

  5. 7_6 带宽(UVa140)<回溯法:最优性剪枝>

    给定一个图(V,E),其中V为顶点的集合,E为边的集合,属于VxV.给定V中元素的一种排序,那么顶点v的带宽定义如下:在当前给定的排序中,与v距离最远的且与v有边相连的顶点与v的距离.给定排序的带宽定 ...

  6. uva140 - Bandwidth

    Bandwidth Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and an orderi ...

  7. α-β剪枝算法的java语言实现(非常实用)

    利用α-β剪枝算法,对下图所示的博弈树进行搜索,搜索得到根节点选择的走步,以及没有必要进行评估的节点,并求出给出在何处发生了剪枝,以及剪枝的类型(属于α剪枝还是β剪枝). 注:□表示MIN节点:○表示 ...

  8. Sicily 1153: 马的周游问题(DFS+剪枝)

    这道题没有找到一条回路,所以不能跟1152一样用数组储存后输出.我采用的方法是DFS加剪枝,直接DFS搜索会超时,优化的方法是在搜索是优先走出度小的路径,比如move1和move2都可以走,但是如走了 ...

  9. HDU5887 Herbs Gathering(2016青岛网络赛 搜索 剪枝)

    背包问题,由于数据大不容易dp,改为剪枝,先按性价比排序,若剩下的背包空间都以最高性价比选时不会比已找到的最优解更好时则剪枝,即 if(val + (LD)pk[d].val / (LD)pk[d]. ...

随机推荐

  1. 74.Search in a 2D Matrix

    /* * 74.Search in a 2D Matrix * 12.5 by Mingyang * 这里面的对应挺巧的: * 这个就是将2D矩阵转化成1行数组的对应表.所以对于二分查找法的初始值为: ...

  2. Win10激活Office2013的技巧

    原文:http://www.xitongzhijia.net/xtjc/20150720/53252.html KMSpico Win10激活工具 是一款能激活Win8/Win8.1/win10/Of ...

  3. android EditText禁止复制粘贴完整代码

    <!-- 定义基础布局LinearLayout --> <LinearLayout xmlns:android="http://schemas.android.com/ap ...

  4. iOS开发 浅见runloop

    Runloop是线程相关的的基础框架的一部分.一个 run loop 就是一个事件处理 的循环,用来不停的调度工作以及处理输入事件. 使用Runloop的目的是让线程有任务时去处理,没任务就让它处于休 ...

  5. [Node.js] Trigger a File Download in Express

    Downloading and saving a file is a common scenario when building out your web application. Using Exp ...

  6. SQL SELECT TOP, LIMIT, ROWNUM 子句

    SQL SELECT TOP, LIMIT, ROWNUM 子句 SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目. SELECT TOP 子句对于拥有数千条记 ...

  7. easyui datagrid client搜索、分页、排序

    easyui datagrid的排序默认是server端排序.能够用sorter实现client排序[2].client分页可用filter实现[3].client搜索相同能够用filter实现. 不 ...

  8. PHP将当前目录列出来

    $d=dir("."); echo $d->path; while(false !== ($e = $d->read())) { echo "<a hr ...

  9. Access 执行查询时,抛出“标准表达式中数据类型不匹配”的错误

    Access根据时间查询时应在查询条件前后加# SELECT COUNT(*) FROM [User] WHERE [CreateTime] > #{0}#

  10. uva 11468 - Substring(AC自己主动机+概率)

    题目链接:uva 11468 - Substring 题目大意:给出一些字符和各自字符相应的选择概率.随机选择L次后得到一个长度为L的字符串,要求该字符串不包括随意一个子串的概率. 解题思路:构造AC ...