博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ】【最小生成树】1789 Truck History
阅读量:7078 次
发布时间:2019-06-28

本文共 1508 字,大约阅读时间需要 5 分钟。

1 思路

最小生成树(MST)问题。

2 代码

代码来自。

#include 
#include
#include
using namespace std;const int N=2001;char c[N][8]; // 保存字符串int m[N][N]; // m[i][j]第i个结点与第j个结果之间权值int d[N]; // 遍历时存储最小值bool v[N]; // 遍历时存储结点是否被访问过int n;// 比较字符串返回路径权值int cmp(int a, int b){ int n = 0; for(int i=0; i<7; i++) if(c[a][i] != c[b][i]) n ++; return n;}//Prim算法void prim(){ int i, j; for(i=1; i<=n; i++) // 把第1个结点所有邻结点的路径保存在d中 d[i] = m[1][i]; memset(v, 0, sizeof(v)); int ans=0; while(1){ int mark = -1; int min = numeric_limits
::max(); for(i=1; i<=n; i++) if(!v[i] && min>d[i]){ // 找到最短的路径,结点保存在mark中,权值保存在min中 min = d[i]; mark = i; } if(mark == -1){ // mark==-1表明经历上面的for循环后mark没有变化,说明所有的结点都已经访问过(v中标记也所有的结点) cout<<"The highest possible quality is 1/"<
<<"."<
m[mark][i]) d[i] = m[mark][i]; }}// readvoid read(){ int i, j; while(cin>>n){ if(!n) return; for(i=1; i<=n; i++) cin>>c[i]; for(i=1; i<=n; i++) for(j=i+1; j<=n; j++){ m[i][j] = cmp(i, j); // 保存权值 m[j][i] = m[i][j]; } prim(); }}int main(int argc, char *argv[]){ read(); return 0;}

Author: visaya fan 

Date: 2011-08-24 12:55:48

HTML generated by org-mode 6.33x in emacs 23

转载地址:http://hwvml.baihongyu.com/

你可能感兴趣的文章
POJ-1611-The Suspects(并查集)
查看>>
用VC生成 IDispatch 包装类
查看>>
xcode5.1上真机调试报告No architectures to compile for...的解决办法
查看>>
Codeforces 106A:Card Game
查看>>
算法导论读书笔记-第十四章-数据结构的扩张
查看>>
HttpClient使用详解
查看>>
char、varchar、nchar、nvarchar的区别
查看>>
锐捷、赛尔认证MentoHUST
查看>>
前后台传值 201...
查看>>
POJ 2133 暴搜
查看>>
BZOJ 1379 模拟退火
查看>>
MSDN中关于COM教程编译参数的修改
查看>>
一个js验证类
查看>>
ansible笔记(12):handlers的用法
查看>>
GPS文件处理
查看>>
Spring Boot 入门
查看>>
数据库excel导出
查看>>
MyBati__mapper 中取值(#{} 或${}) 以及 parameterType为(基本类型 或复杂类型)
查看>>
在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
查看>>
docker的安装
查看>>