http://poj.org/problem?id=1789

这是一道图论的题,个人觉得和那个POJ1258是差不多的,就是多了一步,题目难以读懂

题目的意思:就是给你一群字符串要你找字符串对应的字符不同,使得这个字符串与其他字符串不同

举个例子,不然题目也确实看不懂,

4

a b a a a b a

b a a a a b a

b a a b b a b

a b a a a a a

以第一个为主的与其他行不同的字母数分别为:0 2 6 1

以第二个为主的与其他行不同的字母数分别为:2 0 4 3

以第三个为主的与其他行不同的字母数分别为:6 4 0 5

以第四个为主的与其他行不同的字母数分别为:1 3 5 0

所求的最短的不是2+6+1=9;

而应该是 1+2+4,这才是最短的,这就是prim。

而所谓的prim,就是首先以一个节点作为最小生成树的初始节点,然后以迭代的方式找出与最小生成树中各节点权重最小的边。

用代码来解释是比较好的。

 #include <stdio.h>
#include <iostream>
#include <string.h>
#include <string> using namespace std; #define inf 100007
char str[][];
int dis[],n,ans,mp[][];
bool vis[];
void creatmp()
{
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
ans=;
for(int k=;k<;k++)
if(str[i][k]!=str[j][k]) ans++;
mp[i][j]=ans;
}
} bool prim()
{
ans=;
for(int i=;i<=n;i++) //对dis进行初始化,这里的dis指的就是两个字符串对应位置的字符的不同总值。
dis[i]=inf;
dis[]=;    //因为相同字符串是相同的,所以这个为0。
for(int i=;i<=n;i++)
{
int tmp=inf;int k=;
for(int j=;j<=n;j++)
if(vis[j]&&dis[j]<tmp) //找出dis最小的,并记录。
{
tmp=dis[j];
k=j;
}
if(tmp==inf) return false;
ans+=tmp;
vis[k]=false;
for(int j=;j<=n;j++) //用dis来记录每一列。
if(vis[j]&&dis[j]>mp[k][j])
dis[j]=mp[k][j];
}
return true;
} int main()
{
while(scanf("%d",&n)&&n!=)
{
memset(vis,true,sizeof(vis));
for(int i=;i<=n;i++)
scanf("%s",str[i]);
creatmp();
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
printf("%d ",mp[i][j]);
printf("\n");}
prim();
printf("The highest possible quality is 1/%d.\n",ans);
}
}

poj 1789的更多相关文章

  1. poj 1789 prime

    链接:Truck History - POJ 1789 - Virtual Judge  https://vjudge.net/problem/POJ-1789 题意:先给出一个n,代表接下来字符串的 ...

  2. Kuskal/Prim POJ 1789 Truck History

    题目传送门 题意:给出n个长度为7的字符串,一个字符串到另一个的距离为不同的字符数,问所有连通的最小代价是多少 分析:Kuskal/Prim: 先用并查集做,简单好写,然而效率并不高,稠密图应该用Pr ...

  3. POJ 1789 -- Truck History(Prim)

     POJ 1789 -- Truck History Prim求分母的最小.即求最小生成树 #include<iostream> #include<cstring> #incl ...

  4. POJ 1789 Truck History (Kruskal)

    题目链接:POJ 1789 Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks ...

  5. poj 1789 Truck History

    题目连接 http://poj.org/problem?id=1789 Truck History Description Advanced Cargo Movement, Ltd. uses tru ...

  6. poj 1789 Truck History(最小生成树)

    模板题 题目:http://poj.org/problem?id=1789 题意:有n个型号,每个型号有7个字母代表其型号,每个型号之间的差异是他们字符串中对应字母不同的个数d[ta,tb]代表a,b ...

  7. poj 1789 Truck History(kruskal算法)

    主题链接:http://poj.org/problem?id=1789 思维:一个一个点,每两行之间不懂得字符个数就看做是权值.然后用kruskal算法计算出最小生成树 我写了两个代码一个是用优先队列 ...

  8. POJ 1789 Truck History (Kruskal 最小生成树)

    题目链接:http://poj.org/problem?id=1789 Advanced Cargo Movement, Ltd. uses trucks of different types. So ...

  9. (最小生成树)Truck History --POJ -- 1789

    链接: http://poj.org/problem?id=1789 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2213 ...

随机推荐

  1. 1.servlet的会话机制cookie

    会话:用户开浏览器访问某个网站,只要不关闭浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个过程称为一次会话 cookie会话: 1.记录用户上次登录的时间 2.浏览商品的历史 ...

  2. mongodb 基本用法大全

    1>给数据库添加用户名密码    db.addUser("xxx","yyy") 2>

  3. Linux下的文件及文件后缀名

    Linux下的文件及文件后缀名 2013-03-14 15:34 6969人阅读 评论(0) 收藏 举报 ++++++++++++++++++++++++++++++++++++++正文+++++++ ...

  4. Java中的LookAndFeel

    Java'中的几种Look and Feel1.Metal风格 (默认)String lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFe ...

  5. [原] Android快速开发框架-AndroidFine,GitHub开源

    Android快速开发框架 UI组件,不止是简单整合,更易用 沉浸式状态栏,界面更漂亮 左滑返回,非常流畅 简单.可复用.易扩展的底部导航 PagerSlidingTabStrip,导航标签文字颜色和 ...

  6. Tomcat 6.0 简介

    本片翻译来自:http://tomcat.apache.org/tomcat-6.0-doc/introduction.html 介绍 无论是开发者还是tomcat管理员在使用前都需要了解一些必要的信 ...

  7. [AngularJS] 常用指令

    常用指令 ng-hide指令,用于控制部分HTML元素可见(ng-hide="false")和不可见状态(ng-hide="true"),如下: <div ...

  8. nyoj 15 括号匹配(二)动态规划

    当时看到(二)就把(一)做了, 一很容易,这道题纠结了好几天,直到今晚才看懂别人的代码谢,勉强才写出来.................... 不愧是难度6的题. #include <stdio ...

  9. linux下gedit读取txt乱码解决办法

    修改一下gedit的设置来让它显示的txt不再是乱码: 你可以通过以下步骤,使 gedit 正确显示中文编码文件. 按下 Alt-F2,打开“运行应用程序”对话框.在文本框中键入“gconf-edit ...

  10. 扁平化设计五大原则(转自CSDN翻译)

    Cousins表示他虽然对扁平化设计的感觉非常强烈,但并没有特别热爱或者特别讨厌扁平化设计.他认为好的设计不应当局限于某种设计风格,而需要更注重可用性.有用性.如果因为时尚的缘故,那就顺其自然吧.但该 ...