UVA 140 Bandwidth (dfs 剪枝 映射)

题意:

给定一个n个结点的图G和一个结点的排列, 定义结点i的带宽b(i)为i和相邻结点在排列中的最远距离, 所有b(i)的最大值就是这个图的带宽, 给定G, 求让带宽最小的结点排列。

给定的图 n <=8, 字母包含A~Z

上图是两种排列, 图1 各个b(i) 为 6 6 1 4 1 1 6 6 最大值为6  图2 b(i)为 5 3 1 4 3 5 1 4 最大值为 5

本图答案应为 A B C F G D H E    

b(i)为3  3  3  3  2  3  3  3, 最大值为3.

分析:

首先本题输入格式是那种给出一行,然后比较繁琐的题目, 所以可以考虑先读入一行再进行处理会比边读边处理好一点。

读入后第一要确认的就是这个图包含哪些字母, 因为本题需要全排列并按字典序输出, 所以最好把字母先映射为id, 这里使用了,strchr(const char* , char), 该函数可返回字符串中char第一次出现的位置, 不包含该ch则返回NULL。

并把编号由大到小写到letter中, 那么只需要生成这些id的全排列, 就能知道这些字母的全排列。

第二步是建图, 把输入中有用的信息提炼出来, 那么就可以用邻接矩阵建图了,不使用邻接表是因为本题输入会有重边。

 

然后就可以dfs生成全排列了, 这里我只用了一个剪枝, 就是搜索到结点u时, 如果u有m个相邻结点,而且有last(m-已经选中的结点)个还没被我前面的递归选中, 那么如果last > 当前最优带宽k, 就可以剪枝。 因为对于结点u而言, 最理想情况是这last个结点紧跟在u后, 这样结点带宽为m, 如果m >= 目前已经找到最优带宽k , 剪枝是合理的。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char input[3000];
 4 int id[256], letter[30], node[30], temp[30], best_wid[30];
 5 int adj[10][10];
 6 int cnt = 0;
 7 int min_wid = 1e5;
 8 bool vis[30];
 9 int pos[30];
10 void dfs(int dep){
11     if(dep == cnt){
12         int t_wid = -1, pp_wid = -1;
13         for(int i = 0; i < cnt; i++){
14             pp_wid = -1;
15             for(int j = 0; j < cnt; j++){
16             if(adj[i][j]){
17                     pp_wid = max(pp_wid, abs(pos[i] - pos[j]) );
18                 }
19             }
20             t_wid = max(t_wid, pp_wid);
21         }
22         if(t_wid < min_wid){
23             for(int i = 0; i < cnt; i++){
24                 best_wid[i] = temp[i];
25             }
26             min_wid = t_wid;
27         }
28     }
29     else{
30         for(int i = 0; i < cnt; i++){
31             if(!vis[i]){
32                 int last = 0;
33                 for(int j = 0; j < cnt; j++)
34                 {
35                     if(adj[i][j]){
36                         int ok = 1;
37                         for(int k = 0; k < dep; k++){
38                             if(temp[k] == j) { ok = 0; break;}
39                         }
40                         if(ok) last ++;
41                     }
42                 }
43                 if(last >= min_wid)
44                     continue;
45                 vis[i] = 1;
46                 temp[dep] = i;
47                 pos[temp[dep]] = dep;
48                 dfs(dep+1);
49                 vis[i] = 0;
50             }
51         }
52     }
53 }
54 int main()
55 {
56     while(scanf("%s", input) && input[0] != '#'){
57         memset(adj,0,sizeof(adj));
58         cnt = 0,  min_wid = 1e5;
59         for(char a = 'A'; a <= 'Z'; a++){
60             if(strchr(input, a)){
61                 id[a] = cnt++;
62                 letter[id[a]] = a;
63             }
64         }
65         int len = strlen(input), p=0, q=0;
66         while(1){
67             while(p < len && input[p]!= ':')
68                 p++;
69             if(p == len) break;
70             while(q < len && input[q]!= ';')
71                 q++;
72 //             p定位: q定位;
73             for(int i = p+1; i < q; i++){
74                 adj[id[input[p-1]]][id[input[i]]] = 1;
75                 adj[id[input[i]]][id[input[p-1]]] = 1;
76             }
77             p++, q++;
78         }
79 
80         dfs(0);
81         for(int i = 0; i < cnt; i++){
82             printf("%c ", letter[best_wid[i]]);
83         }
84         printf("-> %d\n", min_wid);
85     }
86     return 0;
87 }

 

转载于:https://www.cnblogs.com/Jadon97/p/7155717.html

3D Gaussian Splatting的使用 Gaussian splatting 快速生成自己屋子的模型 阅读详情

相关推荐

JAX/JAXlib GPU 加速版本安装教程(CUDA)

本文介绍了在Windows WSL2+Ubuntu22.04环境下配置JAX/JAXlib GPU加速版本的详细步骤。使用RTX 4060显卡,安装CUDA 12.4cuDNN 8.9.7驱动,通过Miniconda创建Python 3.9虚拟环境。具体步骤包括:安装Miniconda、配置CUDA环境变量、安装cuDNN驱动、下载并安装JAX/JAXlib。最后通过测试代码验证GPU加速功能,成功检测到GPU并完成矩阵运算。整个过程配有详细命令说明,适合需要搭建JAX GPU开发环境的用户参考。

猿小白的博客 570

带宽(Bandwidth, UVa 140

给出一个n(n≤8)个结点G一个结点排列,定义结点i的带宽b(i)为i相邻结点排列中的最远距离,而所有b(i)的最大值就是整个的带宽。给定G,求出让带宽最小的结点排列,如7-7所示。 下面两个排列的带宽分别为65。具体来说,7-8(a)中各个结点的带宽分别为6, 6,1, 4, 1, 1, 6, 6,7-8(b)中各个结点的带宽分别为5, 3, 1, ...

Nicolas的博客 1160

企业合规审查系统开发实战:基于知识深度学习的智能引擎构建(附完整Python代码)

动态合规监测:实时追踪法规变化并更新知识库智能合约审计:区块链智能合约的自动合规检查跨域知识融合:整合财务、法律、业务多维度数据可解释性增强:基于Attention机制生成合规审查依据。

理论都是虚的,代码才是王道。 438

uva 140 Bandwidth

https://vjudge.net/problem/UVA-140 这道题本来挺简单的,结果一直wa,心态炸裂,没注意输出,当有多个满足条件的输出时,输出字典序最小的一个!!! #include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<math.h> #include<string> #include<string.h&.

qq_35752161的博客 226

UVA-140 Bandwidth

带宽 Sample Input A:FB;B:GC;D:GC;F:AGH;E:HD # Sample Output A B C F G D H E -> 3 #include<cstdio> #include<iostream> #include<vector> #include<string> #include<cstring&...

weixin_38894974的博客 181

UVA - 140Bandwidth )(全排列+暴力)

题意: 给出一个n(n<=8)个节点的G一个节点的排列,定义节点i的带宽为相邻接点在排列中的最远距离。 分析:用全排列暴力做,先找出给出的序列中的所有字母,我用的set存贮(可以去掉重复的字母),这就是需要进行全排列的字符串,在每一个排列里找到带宽,然后输出其中的最小值即可。做的时候总感觉没思路,其实就是自己傻,有时候不愿意深入地去想一个题,总是看完这个题感觉不会就去看另一个题,到头来那个题

zfldongcidaci的博客 481

UVa 140Bandwidth(暴力)

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=841&page=show_problem&problem=76 题意:给出一个n(n≤8)(n \le 8)结点G一个结点排列,定义结点i的带宽b(i)b(i)为i相邻结点排列中的最远距离,而所有b(i)b(i)

nullptr 391

UVA140-Bandwidth(回溯法-双剪枝

经典的回溯做法,紫书上196-197 剪枝:1,最优性剪枝:目前的结果已经比已知的最优解还差时,剪枝。 2,最理想化剪枝:从当前结果出发,后面的情况都是最理想的(预测),但是都比已知的最优解还差,剪枝。 本题要注意的是一直WA的原因是题目所给的字母不一定是相邻的,所以字母范围不是A-H ,有可能是AZ两个字母 ,所以要映射或者压缩。 #include&amp;lt;iostream&amp;gt; #inclu...

我们花时间收集,却忘了最重要的其实是花时间去消化 578

Uva 140 Bandwidth(回溯法+剪枝

书附的代码只有使用next_permutation()逐个计算带宽的,而网上没看到很符合心意的(回溯法+剪枝)的题解,自己写了个自我感觉逻辑比较清晰的,水准有限。(书附git链接:https://github.com/aoapc-book/aoapc-bac2nd/blob/master/ch7/UVa140.cpp)题意:    输入一行数据,其中有n个字符节点节点间的连通关系,输出一组排列,...

r1041953637的博客 1619

UVA 140 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 ordering on the elements in V, then the bandwidth of a node v is defined as the maximum di

Remilia's 1070

UVA 140 Bandwidth (带宽)

Problem 问题 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 elements in V, then the bandwidth of a node v is defined as the maximum distance

disparity_CJK的博客 1116

下降路径最小

本文详细讲解 LeetCode「下降路径最小」这道经典动态规划题。文章从状态表示、状态转移方程推导、dp 表初始化、填表顺序到返回值,逐步拆解完整解题思路。

知识备忘录 570

Python 3.12 pyc反编译全流程:字节码迷踪题解

Python 3.12 pyc反编译全流程:字节码迷踪题解

Morilight的博客 258

deque、list forward_list:vector 之外的三个选择

这个仓库已经开源!现代化 C++(C++11/14/17/20)从基础到进阶的系统教程都在这里,力争做一条完备的现代 C++ 学习路径!欢迎各位大佬前来参观,喜欢的话点个⭐!Github 一键直达: git clone https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP。

charlie114514191的博客 252

湖面逃跑 · Lake Escape(bfs)

链接:九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧题解:

INGNIGHT的专栏 151

数据结构:二叉树的实现

<think>我们要求根据给定内容生成≤150字的文章摘要。内容是关于二叉树的介绍,包括定义、术语、性质、存储、创建、遍历、统计等。摘要需要概括核心要点。需控制字数在150字以内。注意是“文章摘要”,应简洁概括主要内容。输出直接是摘要文本,不需要额外说明。我们来组织:二叉树是每个节点最多两个子节点的树,有左右之分。常用链式存储,节点含数据及左右指针。创建可用先序+空标记递归。遍历有前序、中序、后序(递归)层序(队列)。关键操作:求叶子数、节点数、高度、每层节点数,销毁需后序。要点:递归出口、根

Edbse的博客 353

[MySQL] SQL优化之性能分析

> 所有数据存放在叶子节点,查询稳定,而二叉树层次会更深,也会有退化为链表的风险#### 3、索引种类:聚簇索引:叶子节点中主键下面挂的是每一行的数据二级索引:叶子节点中索引值下面挂的是主键id#### 4、sql分析(回表查询)现有user表,id为主键,name有唯一约束唯一索引结构,分析下面sql语句。* * *### 一、索引优化#### 1、索引是什么:通过一些约束,快速查询到相应字段的一种数据结构索引在sql优化中占有非常重要的地位,因为索引查询挂钩,查询是我们最常做的一个操作。

2601_96206525的博客 202

hot100_两数相加_链表

<think>我们只需要生成一个不超过150字的摘要,基于题目题解内容。摘要要概括题目大意、解法核心思想、复杂度。注意要求“根据以下内容,生成≤150字的文章摘要”。所以写一段简洁的中文摘要。 需要包含:题目是两数相加,链表逆序表示;解法模拟竖式加法,逐位相加,处理进位长短链表,用哑节点;复杂度O(max(n,m)),空间O(max(n,m))(或O(1)不计输出)。注意字数限制。 写一段话。</think>本题给出两个逆序链表表示的非负整数,要求返回同样逆序形式的链表。解法模拟竖式加法,从低位逐位相

cz0710的博客 301

分治&递归

一个大问题分解成多个大问题逻辑相同的子问题递归出口(边界条件)----TLE /RE 找全递归终止条件 ---经验递归代码的理解:画递归调用-带一个比较小的值进去,你手动画一下它的执行返回过程从哪个地方调用就返回到哪里怎么写一个递归函数:确定递归函数是干什么的,在写代码的过程中,只考虑当前的问题怎么解决,不分析下层的递归怎么展开递归函数用来解决这些类似的小问题的----->确定递归函数能解决什么问题在写递归函数时,当我们需要用到类似小问题的答案的时候,直接调用递归函数。

Nanamisa__的博客 265

算法30,前缀为k的子数组

✅“以前有没有出现过sum - k?有的话,有几个?每一个出现,都对应一个合法子数组。

sheshibenniaodan的博客 173

CTFshow pwn03「stack1」题解

远程程序跑起来后,这个值就是 libc 里的 puts 地址,减去 puts 在 libc 里的固定偏移,就是 libc 基址。第一步,先泄露一个 libc 函数的真实地址。程序自己调过 puts,它的 PLT/GOT 表项里就存着 puts 在 libc 里的真实地址,让程序自己把它打印出来就行——用溢出调用 puts(puts@got)。第二步,用这个地址算出 libc 基址,再加上 system /bin/sh 在 libc 里的固定偏移,第二次溢出执行 system("/bin/sh")

weixin_46831482的博客 305

算法导论第15章课后习题答案

算法导论第15章-动态规划的课后习题参考答案,对于算法爱好者而言,是不错的参考资料。

数字滤波器的MATLABFPGA实现 第2版 [杜勇 编著] 2014年版.pdf

杜勇写的数字滤波器的matlabFPGA实现,非常经典的一本书

上一篇: 八皇后问题 回溯法
下一篇: UVa 210 并行程序模拟(deque)
dixianqi2609
博客等级 码龄10年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值