Uva 140 - Bandwidth
2013-04-28 22:14
295 查看
Bandwidth |
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=76
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define VALUE 12 #define INF 1000000 using namespace std; int graph[VALUE][VALUE]; //邻接表存储图 char input[VALUE*VALUE+10]; //输入 int list[27], store[27]; //list存储所有的节点,store存储当前有最小值的排列 int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); #endif int i, j, t, len, temp, start, point, cnt; int _max, _min; while(scanf("%s", input) != EOF) { if(strcmp(input, "#") == 0) break; memset(list, 0, sizeof(list)); memset(graph, 0, sizeof(graph)); len = strlen(input); cnt = 0; for(i=0; i<len; ++i) {//处理输入,所有的字符都转换成整型 start = input[i] - 'A'; for(t=0; t<cnt && list[t] != start; ++t); if(t >= cnt) list[cnt++] = start; for(i=i+2; input[i] != ';' && i<len; ++i) { point = input[i] - 'A'; for(t=0; t<cnt && list[t] != point; ++t); if(t >= cnt) list[cnt++] = point; graph[start][++graph[start][0]] = point; } } sort(list, list+cnt); _min = INF; do {//每次循环list为不同的排列 _max = -INF; for(i=0; i<cnt; ++i) { temp = list[i]; for(j=1; j<=graph[temp][0]; ++j) { for(t=0; t<cnt && list[t] != graph[temp][j]; ++t); point = (int)fabs(i-t); if(_max < point) _max = point; } } if(_min > _max) { _min = _max; memcpy(store, list, sizeof(int)*cnt); } }while(next_permutation(list, list+cnt)); for(i=0; i<cnt; ++i) printf("%c ", store[i]+'A'); printf("-> %d\n", _min); } return 0; }
相关文章推荐
- UVA 140 Bandwidth
- UVa140 Bandwidth
- uva140 Bandwidth
- uva 140 - Bandwidth
- 紫书搜索 例题7-6 UVA - 140 Bandwidth
- uva 140 Bandwidth (全排列+暴力枚举)
- 带宽(Bandwidth,UVa 140)
- UVa 140 Bandwidth 例题7-6
- UVa 140 - Bandwidth
- 例题7-6 UVa140 Bandwidth(枚举+剪枝)
- UVa 140 Bandwidth【枚举排列】
- UVa 140 - Bandwidth
- uva 140 bandwidth (好题) ——yhx
- UVa 140 - Bandwidth
- UVA - 140(Bandwidth )(全排列+暴力)
- UVa--140 BandWidth (DFS)
- Bandwidth(UVA - 140)全排列
- UVA 140 - Bandwidth 暴力 全排列 回溯
- uva 140 Bandwidth
- UVA 140 Bandwidth