uva 140 Bandwidth(暴搜+剪枝)
来源:互联网 发布:java int 是多少位的 编辑:程序博客网 时间:2024/04/29 04:34
原题链接:
UVA 140
参考刘汝佳书《算法竞赛入门经典(第二版)》P196.
我是搬运工。
枚举所有可能序列。
找到最终解。
剪枝:当目前最小带宽小于等于正在判断的两个结点距离时,应当剪掉。
注意题目的中 ‘#’
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;const int MAXN=30;const int N=10;int G[MAXN][MAXN];int tempans[N],ans[N];bool flag[MAXN];int main(){string s;while(cin>>s){if(s[0]=='#')break;//奇怪的地方,可能会有第一个数据就是‘#’吧memset(G,0,sizeof(G));memset(flag,0,sizeof(flag));bool p=false;int u;for(int i=0;i<s.length();i++){if(s[i]>='A'&&s[i]<='Z')flag[s[i]-'A']=true;if(s[i]==':'){u=s[i-1]-'A';p=true;}else if(p&&s[i]>='A'&&s[i]<='Z'){G[s[i]-'A'][u]=G[u][s[i]-'A']=1;}else if(s[i]==';'){p=false;}}int k=0;for(int i=0;i<26;i++)//记录下对应的位置{if(flag[i])tempans[k++]=i;}int Min=9;do{int tMin=0;for(int i=0;i<k;i++){for(int j=i+1;j<k;j++){if(G[tempans[i]][tempans[j]])tMin=max(tMin,abs(i-j));}if(tMin>=Min)break;}if(tMin<Min){Min=tMin;memcpy(ans,tempans,sizeof(tempans));}}while(next_permutation(tempans,tempans+k));for(int i=0;i<k;i++)printf("%c ",ans[i]+'A');printf("-> %d\n",Min);}return 0;}
0 0
- uva 140 Bandwidth(暴搜+剪枝)
- Uva 140 Bandwidth(回溯法+剪枝)
- UVa 140 - Bandwidth(全排列+回溯剪枝)
- UVA 140 带宽 Bandwidth (暴力枚举+剪枝)
- UVa 140 Bandwidth(DFS 回溯 剪枝)
- UVa 140 Bandwidth (枚举全排列&剪枝搜索)
- UVa 140 - BandWidth (暴力)
- UVa 140 - Bandwidth(回溯)
- UVa 140:Bandwidth(暴力)
- uva 140 Bandwidth (下一个序列+判断)
- UVa 140 - BandWidth 解题报告(暴力)
- UVA - 140 Bandwidth(全排列枚举)
- UVa #140 Bandwidth (例题7-6)
- UVA 140——Bandwidth(暴力)
- UVa 140 - Bandwidth
- uva 140 - Bandwidth
- UVa 140 - Bandwidth
- uva 140 - Bandwidth
- VC和VS区别
- java 注解
- 10002---基本选择器
- applicationContext.xml配置
- NSLog和description
- uva 140 Bandwidth(暴搜+剪枝)
- iOS Xcode左上角“选择设备”消失
- linux中缺少某些命令该怎么办呢?------以tree命令为例
- 通用选择器
- 【自我提升】——扔掉时间管理,专心致志吃螃蟹
- How to Install OpenCV 3.0 and Python 3.4+ on Ubuntu
- 伪类选择符
- iOS 绘图之API总结
- android集成slidingmenu后虚拟按键覆盖布局的解决方法