UVa 140 - Bandwidth
来源:互联网 发布:oppo手机怎么解网络锁 编辑:程序博客网 时间:2024/05/23 13:03
題目:已知一個無向圖,求一個最小的字典序列,是的聯通的節點之間的序號最大差值最小。
分析:圖論,搜索。記錄節點然後回溯即可。
說明:注意節點不一定的從A開始的連續字母╮(╯▽╰)╭。
#include <cstring>#include <cstdio>char buf[99], link[8][8], used[26], save[8], ans[8], str[8];int maxbandwidths;void dfs(int d, int n){if (d >= n) {int max = 0;for (int i = 0; i < d; ++ i) for (int j = 0; j < i; ++ j)if (link[save[j]][save[i]] && max < i-j)max = i-j;if (maxbandwidths > max) {maxbandwidths = max;for (int j = 0; j < d; ++ j)ans[j] = save[j];}}for (int i = 0; i < n; ++ i)if (!used[i]) {used[i] = 1;save[d] = str[i];dfs(d+1, n);used[i] = 0;}}int main(){while (~scanf("%s",buf) && buf[0] != '#') {int v, u, edge_node = 0;memset(link, 0, sizeof(link));memset(used, 0, sizeof(used));for (int i = 0; buf[i]; ++ i) {if (buf[i] == ':') {edge_node = 1;v = buf[i-1]-'A';used[v] = 1;}else if (buf[i] == ';')edge_node = 0;else if (edge_node) {u = buf[i]-'A';link[v][u] = 1;link[u][v] = 1;used[u] = 1;}}int size = 0;for (int i = 0; i < 26; ++ i)if (used[i]) {str[size ++] = i;used[i] = 0;}maxbandwidths = 8;dfs(0, size);for (int i = 0; i < size; ++ i)printf("%c ",ans[i]+'A');printf("-> %d\n",maxbandwidths);} return 0;}
0 0
- UVa 140 - Bandwidth
- uva 140 - Bandwidth
- UVa 140 - Bandwidth
- uva 140 - Bandwidth
- UVa 140 - Bandwidth
- UVA 140 - Bandwidth
- UVa 140 - Bandwidth
- UVA 140 Bandwidth
- uva 140 Bandwidth
- uva 140 Bandwidth
- UVa:140 Bandwidth
- UVa 140 - Bandwidth
- uva 140 - Bandwidth
- UVa 140 Bandwidth
- UVa 140 - Bandwidth
- uva 140 Bandwidth 带宽
- UVA - 140 Bandwidth
- UVA - 140 Bandwidth
- Spring AOP的实现
- C语言基础 输入两个整数num1和num2,并根据运算符的不同进行不同的运算。
- Linux pipe函数
- 正则表达式- 将div#demo.demo转化成<div id="demo" class="demo"></div>
- 贪心-百度笔试-裁减网格纸
- UVa 140 - Bandwidth
- HTML&CSS——margin:0 auto居中
- 中文分词词性对照表
- LeetCode:Rotate List
- dirname(__file__)函数 返回网站根目录
- SQL使用case判断
- iOS开发者最需要的15个网站
- Android流式布局实现
- 微信接口返回码