poj 1789 Truck History(prim算法)
来源:互联网 发布:c盘中的windows大小 编辑:程序博客网 时间:2024/05/18 03:58
未优化版本
/*prim算法实现*/ #include <iostream>//#include <fstream>using namespace std;#define MAX 2001#define INF 0xffff/*15988K500MS*///varint n;char a[MAX][10];int sum;//代表生成树的长度int m[MAX][MAX];//fstream fin;//fuctionint GetDis(int x,int y);void cal();void prim(int u);int main(){ //fin.open("1789.txt",ios::in); while(cin>>n) { if(n==0) break; sum=0; for(int i=0;i<n;i++) cin>>a[i]; //初始化距离为0 memset(m,0,sizeof(m)); cal(); prim(0); cout<<"The highest possible quality is "<<"1/"<<sum<<"."<<endl; } system("pause"); return 0;}//计算每一对类型的距离 void cal(){ for(int i=0;i<n;i++) { for(int j=0;j<n;j++) m[i][j]=GetDis(i,j); }}//计算一对顶点的代码 int GetDis(int x,int y){ int count=0; for(int i=0;i<7;i++) if(a[x][i]!=a[y][i]) ++count; return count;} //prim算法void prim(int u){ int *lowset=new int[n]; bool *s=new bool[n]; //初始化 for(int i=0;i<n;i++) { if(u!=i) { lowset[i]=m[u][i]; s[i]=false; } } int q; s[u]=true; for(int i=0;i<n-1;i++) { //找到最小的lowest int min=INF; for(int j=0;j<n;j++) { if(lowset[j]<min&&(!s[j])) { q=j; min=lowset[j]; } } //更新s,lowest sum+=min; s[q]=true; for(int j=0;j<n;j++) { if(m[q][j]<lowset[j]&&(!s[j])) { lowset[j]=m[q][j]; } } } delete []lowset; delete []s;}
优化版本
/*prim算法*/#include <iostream>//#include <fstream>using namespace std;#define MAX 2001#define INF 0xffff/*356K407MS*/int n;char a[MAX][8];int sum;//fstream fin; void prim(int u);int GetDis(int x,int y);int main(){ //fin.open("1789.txt",ios::in); while(cin>>n) { if(n==0) break; sum=0; for(int i=0;i<n;i++) cin>>a[i]; prim(0); cout<<"The highest possible quality is "<<"1/"<<sum<<"."<<endl; } system("pause"); return 0; } int GetDis(int x,int y){ int count=0; for(int i=0;i<7;i++) if(a[x][i]!=a[y][i]) ++count; return count;}void prim(int u){ int *lowset=new int[n]; bool *s=new bool[n]; //初始化程序 for(int i=0;i<n;i++) { if(u!=i) { lowset[i]=GetDis(u,i); s[i]=false; } } int q; s[u]=true; for(int i=0;i<n-1;i++) { //计算出最小值 int min=INF; for(int j=0;j<n;j++) { if(min>lowset[j]&&!s[j]) { q=j; min=lowset[j]; } } s[q]=true; sum+=min; //更新lowset for(int j=0;j<n;j++) { if(GetDis(q,j)<lowset[j]&&!s[j]) lowset[j]=GetDis(q,j); } }}
- poj 1789 Truck History(prim算法)
- Truck History POJ 1789【Kruscal算法 || Prim】
- POJ-1789 Truck History(Prim算法)
- POJ 1789 Truck History(最小生成树,prim算法)
- POJ-1789 Truck History(prim算法,最小生成树)
- poj 1789 Truck History(prim)
- POJ 1789 Truck History(Prim)
- POJ 1789 Truck History (Prim Algorithm)
- poj 1789 Truck History(prim)
- POJ 1789 Truck History Prim
- poj-1789 Truck History-Prim
- poj 1789 Truck History(Prim)
- POJ--1789 Truck History【prim】
- Truck History Poj 1789(Prim)
- POJ 1789:Truck History 【Prim】
- POJ 1789 Truck History【Prim】
- POJ 1789 Truck History (Prim)
- poj--1789--Truck History(prim)
- 图文详解YUV420数据格式,供自己开发使用
- 教给你新站提高排名
- 嵌入式Web Service gSOAP的移植与应用(一)
- vimrc.local
- 使用Flash地图控件AnyMap在地图上添加自定义区域
- poj 1789 Truck History(prim算法)
- 软件是什么?为什么学习软件开发?
- Acegi安全框架
- 光明牛奶:为学生喝上放心奶保驾护航
- 第三届蓝桥杯Java高职组决赛第三题
- css3 filter属性
- 白帽SEO优化过度的三个原因
- 光明乳业:从聚焦新鲜到突破常温
- 光明乳业:分享天时地利人和成长期