题目链接:https://vjudge.net/contest/210334#problem/F

 转载于:https://www.cnblogs.com/luruiyuan/p/5847706.html

题目大意:
给出一个n个节点的图,求该图中相邻的节点在哪一个由这些节点组成的排列中,带宽最小,输出该排列和最小带宽。(各个节点到相邻节点的最远距离,这些最远距离的最大值即为带宽。)

紫书上介绍了两种剪枝方法,但是以下只给出了一种比较好实现的剪枝。

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std; const int maxn = , inf = 0x7fffffff;
char letter[maxn], s[];//字母,输入序列
int id[]; //字母的编号
int p[maxn]; //全排列的遍历数组 ,存储的是每个字母的编号
int pos[maxn];//记录每个字母的位置,避免频繁使用strchr int main() {
while (scanf("%s", &s), s[] != '#') {
int len = strlen(s), n = ;
for (char ch = 'A'; ch <= 'Z'; ch++)if (strchr(s, ch) != NULL) {
letter[n] = ch;
id[ch] = n++;
}
vector<int> u, v;
for (int i = ; i<len; i++) {
int t = i;//记录起始节点
i += ;
while (i<len && s[i] != ';') {
u.push_back(id[s[t]]);//加入起始节点
v.push_back(id[s[i]]);//加入起始节点的相邻节点
i++;
}
}
//遍历+剪枝 //以下只用了一种剪枝方式,即若发现当前已经排列有某两节点带宽超过了已经遍历过的排列的最小带宽,则当前排列直接跳过
int bandwidth = , res = inf;
int bestP[maxn];//存储最终结果
for (int i = ; i<n; i++)p[i] = i;
do {
bandwidth = ;//初始化别忘了
for (int i = ; i<n; i++)pos[p[i]] = i;//记录编号为pi的节点的位置
for (int i = ; i<u.size(); i++) {
bandwidth = max(bandwidth, abs(pos[u[i]] - pos[v[i]]));
if (bandwidth >= res)break;//剪枝
}
if (bandwidth<res) {
memcpy(bestP, p, sizeof(p));//memcpy比较快
res = bandwidth;
}
} while (next_permutation(p, p + n)); //进行下一个排列的比较
for (int i = ; i<n; i++)printf("%c ", letter[bestP[i]]);
printf("-> %d\n", res);
}
}

2018-04-15

UVa140 Bandwidth 【最优性剪枝】的更多相关文章

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

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

  2. 深搜的剪枝技巧(三)——Sticks(可行性剪枝、上下界剪枝、最优性剪枝)

    小木棍(最优性剪枝.可行性剪枝) 一.问题描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,已知每段的长都不超过 50 .现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍 ...

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

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

  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. 递归回溯 UVa140 Bandwidth宽带

    本题题意:寻找一个排列,在此排序中,带宽的长度最小(带宽是指:任意一点v与其距离最远的且与v有边相连的顶点与v的距离的最大值),若有多个,按照字典序输出最小的哪一个. 解题思路: 方法一:由于题目说结 ...

  8. UVA140 ——bandwidth(搜索)

    Given a graph (V,E) where V is a set of nodes and E is a set of arcs in VxV, and an ordering on the ...

  9. BZOJ 2342 & manachar+最优性剪枝

    题意: 求最长回文串,串的两边都是回文串. Solution: manachar预处理然后暴力找... Code: #include <iostream> #include <cst ...

随机推荐

  1. mysql 案例 ~ pt-io工具的使用

    一 简介:如何使用pt-iopfile调查io具体信息二 目的:利用pt-iopfile分析mysql内部IO操作密集的文件,用以发现问题三 使用: pt-iopfile -p mysql_pid   ...

  2. maven插件的使用

    maven插件官网: https://maven.apache.org/plugins/index.html 1.JDK插件的使用 <build> <plugins> < ...

  3. SpringBoot集成监控管理

    (1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  4. sync_binlog innodb_flush_log_at_trx_commit 浅析【转】

    innodb_flush_log_at_trx_commit和sync_binlog 两个参数是控制MySQL 磁盘写入策略以及数据安全性的关键参数.本文从参数含义,性能,安全角度阐述两个参数为不同的 ...

  5. python闭包的理解说明

    什么是闭包: 闭包(closure)是函数式编程的重要的语法结构.函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式).在面向过程编程中,我们见到过函数(function):在面向 ...

  6. mysql通过centos本地命令行还原数据库出现乱码问题

    将sql文件上传到centos系统中,还原mysql数据库,发现是乱码 mysql -h10.11.8.62 -uroot -p dbtest </data/dbsql/dbtest.sql 数 ...

  7. cacti系列(二)之cacti添加对tomcat服务器的监控

    cacti添加对tomcat的监控 1.首先下载监控tomcat的模板 TomcatStats-0.1.zip    2.导入模板 (cacti_host_template_tomcat_server ...

  8. 转载:编译安装Nginx(1.5.1)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19618.html 1.5 configure详解 可以看出,configure命令至关重要,下文将详细介绍如何使用configure ...

  9. 单点登录SSO+鉴权

    一.单点登录原理 1.登录 2.注销 --------------------------------------------------------------------------------- ...

  10. S5PV210串口

    串口设置之输入输出字符 S5PV210 UART相关说明        通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它 ...