POJ之路11-1789 Truck History
2015-06-15 21:31
357 查看
一、最小生成树实战-1789 Truck History
此题题意有点难理解,输入卡车数目和卡车类型的七位字母编码,要求选择一种派生的方法,使得派生的路径值最小,两个字母编码的不同个数即为路径值。根据题意,也就是求最小生成树的权值,然后表示成1/min_d的形式即可。编写代码中,prim部分直接套用上一篇博客中的代码,只修改了输入数据建图的操作,AC的代码如下。
本来可以一次AC的,结果因为权值定义为min,变量冲突导致编译错误。以后注意变量不要定义为min或者max等。
#include<iostream> #include<algorithm> using namespace std; #define inf 10000 #define max_type 2001 int vertex,edge; int graph[max_type][max_type],fa[max_type]; int lowcost[max_type],lowsource[max_type],used[max_type],min_d; char truck[2001][7]; void prim(int graph[][max_type],int vertex,int fa[]) { int i,j,k;int mincost; for(i=2;i<=vertex;i++) { lowcost[i]=graph[1][i]; lowsource[i]=1; used[i]=0; } used[1]=1; for(i=2;i<=vertex;i++) { mincost=inf; for(j=2;j<=vertex;j++) { if((!used[j])&&lowcost[j]<mincost) { mincost=lowcost[j]; k=j; } } // cout<<lowsource[k]<<" "<<k<<" "<<mincost<<endl; min_d+=mincost; used[k]=1; fa[k]=lowsource[k]; for(j=2;j<=vertex;j++) { if((!used[j])&&graph[j][k]<lowcost[j]) { lowcost[j]=graph[j][k]; lowsource[j]=k; } } } } int weight(char a[],char b[]) { int count=0; for(int i=0;i<7;i++) { if(a[i]!=b[i]) count++; } return count; } int main() { int i,j; cin>>vertex; while(vertex) { min_d=0;//最短路径初始化 for(i=1;i<=vertex;i++) { cin>>truck[i]; } for(i=1;i<=vertex;i++) { fa[i]=-1; for(j=1;j<=vertex;j++) { graph[i][j]=weight(truck[i],truck[j]); } } prim(graph,vertex,fa); cout<<"The highest possible quality is 1/"; cout<<min_d<<"."<<endl; cin>>vertex; } return 0; }
相关文章推荐
- Android中高效的显示图片之三——缓存图片
- winform程序多行textbox滚动条移动当前光标位置
- 现代汽车电子的问题和未来趋势
- Windows下Scrapy安装
- mini2440 一线触摸配置
- 3d之ui快速切换图像
- Linux grep参数详解
- Android中高效的显示图片之二——在非UI线程中处理图片
- hdu 2041 整理下水题 递推动规
- [BI项目记]-新任务处理
- Linux-Unix环境高级编程(第三版)代码编译
- MatLab之HDL coder
- QQ互发消息
- PyCharm简单使用介绍及注意事项
- Program received signal SIGSEGV, Segmentation fault.(转)
- 34Exchange 2010升级到Exchange 2013-先觉条件及架构扩展
- android学习笔记(三)基础UI组件1——按钮,文本框,CheckBox,Radiobutton介绍
- PyCharm简单使用介绍及注意事项
- oracle创建用户 和 给用户授权
- BFS广搜题目有时间一个个做下来