poj 1789
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的更多相关文章
- poj 1789 prime
链接:Truck History - POJ 1789 - Virtual Judge https://vjudge.net/problem/POJ-1789 题意:先给出一个n,代表接下来字符串的 ...
- Kuskal/Prim POJ 1789 Truck History
题目传送门 题意:给出n个长度为7的字符串,一个字符串到另一个的距离为不同的字符数,问所有连通的最小代价是多少 分析:Kuskal/Prim: 先用并查集做,简单好写,然而效率并不高,稠密图应该用Pr ...
- POJ 1789 -- Truck History(Prim)
POJ 1789 -- Truck History Prim求分母的最小.即求最小生成树 #include<iostream> #include<cstring> #incl ...
- POJ 1789 Truck History (Kruskal)
题目链接:POJ 1789 Description Advanced Cargo Movement, Ltd. uses trucks of different types. Some trucks ...
- poj 1789 Truck History
题目连接 http://poj.org/problem?id=1789 Truck History Description Advanced Cargo Movement, Ltd. uses tru ...
- poj 1789 Truck History(最小生成树)
模板题 题目:http://poj.org/problem?id=1789 题意:有n个型号,每个型号有7个字母代表其型号,每个型号之间的差异是他们字符串中对应字母不同的个数d[ta,tb]代表a,b ...
- poj 1789 Truck History(kruskal算法)
主题链接:http://poj.org/problem?id=1789 思维:一个一个点,每两行之间不懂得字符个数就看做是权值.然后用kruskal算法计算出最小生成树 我写了两个代码一个是用优先队列 ...
- POJ 1789 Truck History (Kruskal 最小生成树)
题目链接:http://poj.org/problem?id=1789 Advanced Cargo Movement, Ltd. uses trucks of different types. So ...
- (最小生成树)Truck History --POJ -- 1789
链接: http://poj.org/problem?id=1789 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2213 ...
随机推荐
- 1.servlet的会话机制cookie
会话:用户开浏览器访问某个网站,只要不关闭浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个过程称为一次会话 cookie会话: 1.记录用户上次登录的时间 2.浏览商品的历史 ...
- mongodb 基本用法大全
1>给数据库添加用户名密码 db.addUser("xxx","yyy") 2>
- Linux下的文件及文件后缀名
Linux下的文件及文件后缀名 2013-03-14 15:34 6969人阅读 评论(0) 收藏 举报 ++++++++++++++++++++++++++++++++++++++正文+++++++ ...
- Java中的LookAndFeel
Java'中的几种Look and Feel1.Metal风格 (默认)String lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFe ...
- [原] Android快速开发框架-AndroidFine,GitHub开源
Android快速开发框架 UI组件,不止是简单整合,更易用 沉浸式状态栏,界面更漂亮 左滑返回,非常流畅 简单.可复用.易扩展的底部导航 PagerSlidingTabStrip,导航标签文字颜色和 ...
- Tomcat 6.0 简介
本片翻译来自:http://tomcat.apache.org/tomcat-6.0-doc/introduction.html 介绍 无论是开发者还是tomcat管理员在使用前都需要了解一些必要的信 ...
- [AngularJS] 常用指令
常用指令 ng-hide指令,用于控制部分HTML元素可见(ng-hide="false")和不可见状态(ng-hide="true"),如下: <div ...
- nyoj 15 括号匹配(二)动态规划
当时看到(二)就把(一)做了, 一很容易,这道题纠结了好几天,直到今晚才看懂别人的代码谢,勉强才写出来.................... 不愧是难度6的题. #include <stdio ...
- linux下gedit读取txt乱码解决办法
修改一下gedit的设置来让它显示的txt不再是乱码: 你可以通过以下步骤,使 gedit 正确显示中文编码文件. 按下 Alt-F2,打开“运行应用程序”对话框.在文本框中键入“gconf-edit ...
- 扁平化设计五大原则(转自CSDN翻译)
Cousins表示他虽然对扁平化设计的感觉非常强烈,但并没有特别热爱或者特别讨厌扁平化设计.他认为好的设计不应当局限于某种设计风格,而需要更注重可用性.有用性.如果因为时尚的缘故,那就顺其自然吧.但该 ...