Bandwidth(UVA - 140)全排列
2017-08-07 15:28
531 查看
一、题目大意:
列出每个字母及与该字母相连的字母,通过将所有字母排序,求出每个字母与其相连字母的最大值,并求出这些这些最大值中的最小值。
二、题目求解
题目意思很直观。但是工具用不对会增加题目求解的复杂性。
小技巧:
三、附代码
列出每个字母及与该字母相连的字母,通过将所有字母排序,求出每个字母与其相连字母的最大值,并求出这些这些最大值中的最小值。
二、题目求解
题目意思很直观。但是工具用不对会增加题目求解的复杂性。
小技巧:
(1)读入:设置变量string s来读入每行,将每行中的‘;’改为‘ ’,因为构造字符串流的时候,空格会成为字符串参数的内部分界。然后用上stringstream。
(2)字母与相连字母的关系:用vector<char> G[ ] 来存入。
(3)所有出现的字母:set<char> p挨个读入,然后赋给char m[ ],用于之后的全排列。三、附代码
#include<iostream> #include<cstdio> #include<algorithm> #include<stack> #include<queue> #include<cstring> #include<string> #include<set> #include<cmath> #include<map> #include<sstream> using namespace std; #define inf 0x3f3f3f3f typedef long long LL; const int maxn = 26; const int maxm = 1000 + 8; vector<char> G[maxn]; string s,ans,t; set<char> p; void Init() { for(int i = 0; i < maxn; ++i){G[i].clear();} ans = ""; t = ""; p.clear(); } void DealString() { int len = (int)s.length(); for(int i = 0; i < len; ++i){ if(s[i] == ';') s[i] = ' ';//便于之后的stringstream if(isalpha(s[i])) p.insert(s[i]);//将所有出现的字母都无重复的存起来 } //每个字母与相连字母用vector存储 stringstream stream(s); while(stream >> t) { int aa = t[0] - 'A'; int x = (int)t.length(); for(int i = 0; i < x; ++i){ int cc = t[i] - 'A'; G[aa].push_back(t[i]); G[cc].push_back(t[0]); } } } void Solve() { //将set中的字母读进m,为之后全排列做准备 int num = 0; char m[maxm] = "\n"; set<char>::iterator it; for(it = p.begin(); it != p.end(); ++it){ m[num++] = *it; } int minn = inf; do{ int maxx = 0; //求每个字母与其相连字母距离的最大值。 for(int i = 0; i < num; ++i){ int bb = m[i] - 'A'; for(int j = 0; j < num; ++j) { vector<char>::iterator iter; iter = find(G[bb].begin(), G[bb].end(), m[j]); if(iter != G[bb].end()){ maxx = max(maxx, abs(j - i)); } } } //求距离最大值中的最小值。 if(minn > maxx){ ans = m; minn = maxx; } }while(next_permutation(m,m+num)); for(int i = 0; i < ans.length(); ++i){ cout << ans[i] << " "; } cout << "-> " <<minn << endl; } int main() { while(cin >> s){ Init(); if(s == "#") break; DealString(); Solve(); } } /* A:FB;B:GC;D:GC;F:AGH;E:HD A:FB A:E Z:A A:B;A:C;B:A;C:A A:BA;A:C;B:A;C:A M:N;O:P;Q:RP;S:T # */
相关文章推荐
- UVA 140 - Bandwidth 暴力 全排列 回溯
- uva 140 Bandwidth (全排列+暴力枚举)
- UVA - 140 Bandwidth(全排列枚举)
- UVA - 140 Bandwidth(全排列枚举)
- UVa 140 Bandwidth (枚举全排列&剪枝搜索)
- uva 140 Bandwidth(全排列+递归)
- UVA - 140(Bandwidth )(全排列+暴力)
- 例题7-6 UVa140 Bandwidth(枚举+剪枝)
- UVa 140 - Bandwidth
- 带宽(Bandwidth,UVa 140
- uva 140 - Bandwidth
- UVA 140 Bandwidth (带宽)
- UVa - 140 - Bandwidth
- 带宽(Bandwidth,UVa 140)
- UVa 140 (枚举排列) Bandwidth
- UVA 140_Bandwidth
- UVA140 - Bandwidth (暴力dfs+排列+剪枝)
- uva 140 Bandwidth
- UVA - 140 Bandwidth
- UVa140 - Bandwidth