给出一个图节点数为n(n8)让这些节点排序,使得节点的最大带宽要最小,最大带宽就是排列里面与节点相离最远的距离。

有两种方法,第一,因为n比较小就可以枚举全部,然后一个一个的比较,还有一种就是边排列边比较。只要其中两个节点的距离大于目前最大,那么下面的排列可以直接省去。

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;const int maxn = 10;
int id[256], letter[maxn];
int P[maxn], bestP[maxn], pos[maxn];    vector<int>u, v;       int ans;
void dfs(int n,int *A,int cur) {if (cur == n) {for (int i = 0; i < n; i++)pos[A[i]] = i;int bandwidth = 0;for (int i = 0; i < u.size(); i++) {bandwidth = max(bandwidth,abs(pos[u[i]] - pos[v[i]]));}if (ans > bandwidth) {ans = bandwidth;for (int i = 0; i < n; i++)bestP[i] = A[i];}}else for (int i = 0; i < n; i++) {int ok = 1;for (int j = 0; j < cur; j++) {if (A[j] == i)ok = 0;}if (ok) {A[cur] = i;dfs(n,A,cur + 1);}}
}
int main() {char input[1000];while(scanf("%s", input) == 1 && input[0] != '#') {int n = 0; memset(pos, 0, sizeof(pos));memset(bestP, 0, sizeof(bestP));u.clear(); v.clear();for (char ch = 'A'; ch < 'Z'; ch++) {if (strchr(input, ch) != NULL) {id[ch] = n++;letter[id[ch]] = ch;}}int len = strlen(input), p = 0, q = 0;for (;;) {while (p < len&&input[p] != ':')p++;if (p == len)break;while (q < len&&input[q] != ';')q++;for (int i = p + 1; i < q; i++) {u.push_back(id[input[p - 1]]);v.push_back(id[input[i]]);}p++; q++;}ans = n; int A[10];dfs(n, A, 0);for (int i = 0; i < n; i++) printf("%c ", letter[bestP[i]]);printf("-> %d\n", ans);}return 0;
}

下面这种是使用了next_permutation方法

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 10;
int id[256], letter[maxn];
int main() {char input[1000];while (scanf("%s", input) == 1 && input[0] != '#') {// 计算结点个数并给字母编号int n = 0;for (char ch = 'A'; ch <= 'Z'; ch++)if (strchr(input, ch) != NULL) {id[ch] = n++;letter[id[ch]] = ch;}// 处理输入int len = strlen(input), p = 0, q = 0;vector<int> u, v;for (;;) {while (p < len && input[p] != ':') p++;if (p == len) break;while (q < len && input[q] != ';') q++;for (int i = p + 1; i < q; i++) {u.push_back(id[input[p - 1]]);v.push_back(id[input[i]]);}p++; q++;}// 枚举全排列int P[maxn], bestP[maxn], pos[maxn], ans = n;for (int i = 0; i < n; i++) P[i] = i;do {for (int i = 0; i < n; i++) pos[P[i]] = i; // 每个字母的位置int bandwidth = 0;for (int i = 0; i < u.size(); i++)bandwidth = max(bandwidth, abs(pos[u[i]] - pos[v[i]])); // 计算带宽if (bandwidth < ans) {ans = bandwidth;memcpy(bestP, P, sizeof(P));}} while (next_permutation(P, P + n));// 输出for (int i = 0; i < n; i++) printf("%c ", letter[bestP[i]]);printf("-> %d\n", ans);}return 0;
}

UVA140 Bandwidth带宽相关推荐

  1. UVa140 Bandwidth 【最优性剪枝】

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

  2. uva140 Bandwidth

    https://vjudge.net/problem/UVA-140 给出一个图,构造一个排列,使图上相邻节点在排列中的距离最大值最小 没有剪枝,竟然10ms过了,~~~ #include<cs ...

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

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

  4. iperf测试带宽linux,iperf3-网络带宽性能测试工具

    作用:基于TCP或UDP,对网络带宽吞吐量进行测试 安装:yum install iperf3 -y 服务端参数: -s:表示启动服务端 -i:表示打印报告的时间间隔 -p:指定监听端口,默认为520 ...

  5. 网络的性能指标:带宽和延迟

    文章目录 带宽(bandwidth) 带宽的决定因素 延迟(delay) 带宽和延迟的关系 带宽(bandwidth) 描述在单位时间内传输的数据量 单位 = bps(bit per second) ...

  6. TI 高精度实验室《运算放大器系列--带宽》

    TI 高精度实验室系列课程 - 运算放大器 5.1 电子领域我们经常需要表达数值,如 Operational gain 运算放大器的增益. Signal to noise ratio 信号与噪声比.C ...

  7. 【算法特训总结】计算机经典算法的核心思想及独特角度的解读

    计算机经典算法的核心思想及独特角度的解读 在1月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...

  8. 弱网测试用什么农_弱网测试(一)

    一.为什么要进行弱网测试 弱网测试作为健壮测试的重要部分,对于移动端测试来说必不可少.这是因为目前移动端产品的使用用户所处的网络并非完全的流畅WIFI环境,仍有相当多的用户主要使用4G.3G.2G等网 ...

  9. 家电 计算机和电讯领域 英语,网络通讯及计算机英语词汇.doc

    网络通讯及计算机英语词汇 0-9 3DDS 三维数字交互宽带网络系统 A absolute positioning 绝对寻址 abstract windows toolkit 抽象窗口工具库 accu ...

最新文章

  1. 对象后加一个值 php_PHP 对象使用
  2. Java 连接数据库 JDBCUtil
  3. Oracle 11g 数据统计量Pending处理
  4. MySql+Socket 完成数据库的增查Demo
  5. 英语中十二个月份的由来
  6. java中同步组件_Java并发编程(自定义同步组件)
  7. 【转】ubuntu16.04安装配置tftp服务
  8. C/C++传递二维数组[转载]
  9. 加工生产调度(信息学奥赛一本通-T1425)
  10. springboot使用jsp完成数据的页面展示
  11. mysql统计功能和数据库information_schema/performance_schema
  12. Delphi学习链接
  13. GM300单片硅钢铁损测试仪操作使用指引
  14. 下载SE78里面的图片
  15. 尾注后添加正文(word 2007)
  16. 报价单与贸易术语关系
  17. java小型计费系统设计_JAVA课程设计模拟电信计费系统
  18. java8使用Comparator.comparing进行排序
  19. 小米NFC手机 手环 复制加密IC门禁卡
  20. QT运行时问题CreateDC failed

热门文章

  1. 数据库性能瓶颈的出现
  2. 反射_Class对象功能_获取Constructor
  3. AOP日志-域对象创建与基本操作介绍
  4. Eureka简介与Eureka Server上
  5. SpringBoot 数据验证错误处理
  6. batocera_batocera系统如何把旧电脑改造成影音游戏主机
  7. Spring Boot配置文件有提示
  8. JAVA BIO与NIO、AIO的区别
  9. java 正则 多个空格_java正则表达式 多个空格替换多个成-
  10. java reader类 实例_Java Reader ready()用法及代码示例