uva140带宽
来源:互联网 发布:淘宝上怎么修改会员名 编辑:程序博客网 时间:2024/05/18 01:19
写的比较乱,全排列 的形式 + 回溯
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char s[1000];int k ;//结点个数int v[100];struct node{ char name; char next[15]; int len; int flag;}a[30],b[10];struct node1{ char p[20]; int val;}ans,t;bool cmp(node x,node y){ return x.name < y.name;}bool isA(char c){ if(c >= 'A' && c <= 'Z') return true; return false;}int idx(char c){ for(int i = 0;i < k;++i) if(t.p[i] == c) return i;}int idx1(char c){ for(int i = 0;i < k;++i) if(b[i].name == c) return i;}int bandwidth(char c){ int idx_c = idx(c); int idx_c1 = idx1(c); int cnt = 0; for(int i = 0;i < b[idx_c1].len;++i) { int idx_t = idx(b[idx_c1].next[i]); cnt = max(cnt,idx_c - idx_t > 0 ? idx_c - idx_t : idx_t - idx_c); } return cnt;}void dfs(int cur){ if(cur == k) { int cnt = 0; t.p[k] = '\0'; for(int i = 0;i < k;++i) cnt = max(cnt,bandwidth(t.p[i])); if(cnt < ans.val) { strcpy(ans.p,t.p); ans.val = cnt; } return ; } for(int i = 0;i < k;++i) { if(!v[i]) { t.p[cur] = b[i].name; v[i] = 1; dfs(cur + 1); v[i] = 0; } }}int main(){ while(~scanf("%s",s) && s[0] != '#') { memset(a,0,sizeof(a)); memset(v,0,sizeof(v)); int len = strlen(s); k = 0; //结点个数 ans.val = 9999999; int temp = s[0] - 'A'; a[temp].name = s[0]; a[temp].flag = 1; for(int i = 1;i < len;++i) { if(isA(s[i]) && s[i + 1] == ':'){ //如果是结点名字 a[s[i] - 'A'].name = s[i]; temp = s[i] - 'A'; a[temp].flag = 1; } else if(isA(s[i])) { int ok = 1; for(int j = 0;j < a[temp].len;++j) if(a[temp].next[j] == s[i]){ ok = 0; break; } if(ok) a[temp].next[a[temp].len++] = s[i]; ok = 1; for(int j = 0;j < a[s[i] - 'A'].len;++j) { if(a[s[i] - 'A'].next[j] == a[temp].name) { ok = 0; break; } } if(ok){ a[s[i] - 'A'].next[a[s[i] - 'A'].len++] = a[temp].name; a[s[i] - 'A'].flag = 1; a[s[i] - 'A'].name = s[i]; } } } for(int i = 0;i < 26;++i) if(a[i].flag) { //printf("i = %d\n",i); b[k].name = a[i].name; for(int j = 0;j < a[i].len;++j) b[k].next[j] = a[i].next[j]; b[k++].len = a[i].len; //printf("k = %d\n",k); } dfs(0); for(int i = 0;i < k;++i) printf("%c ",ans.p[i]); printf("-> "); printf("%d\n",ans.val); /*for(int i = 0;i < k;++i) { printf("结点名字%c:相连结点为:",a[i].name); for(int j = 0;j < a[i].len;++j) printf("%c",a[i].next[j]); printf("\n"); }*/ }}
0 0
- uva140带宽
- uva140带宽问题
- 例题7-6 带宽 UVa140
- UVa140
- UVA140
- uva140
- UVA140
- uva140
- uva140
- UVA140
- UVa140
- UVa140 Bandwidth
- uva140 - Bandwidth
- UVa140 - Bandwidth
- uva140 题解
- UVA140 - Bandwidth
- uva140-Bandwidth
- uva140 - Bandwidth
- 2017校招4399面试经验
- 浅谈 hieararchyviewer使用
- PopupWindow使用
- 解决Xcode 8 模拟器10.0不能删除应用的问题
- 欢迎使用CSDN-markdown编辑器
- uva140带宽
- Unreal Engine 4 C++ 动态加载UMG界面
- iOS 静态库,动态库与 Framework
- BZOJ2802/POI 2012 Warehouse Store
- thymeleaf 回显富文本编辑器的内容
- 我的spark学习之路(四):利用geotrellis 裁剪TIF数据
- 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- 文章标题
- wav文件格式1