ZOJ 2750 Idiomatic Phrases Game(Dijkstra)
题意 : 给定一本字典,字典里有很多成语,要求从字典里的第一个成语开始,运用字典里的成语变到最后一个成语,变得过程就是成语接龙,后一个成语的第一个字必须有前一个成语的最后一个字相等,给定的成语是4位16进制位,每个成语前边跟的数字代表着找到这个成语之后再找到下个成语还需要t分钟 。
思路 :将所有的成语看成一个点,如果找到下一个成语,就建一条有向边,然后用dijkstra求最短路。

#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; struct node
{
char f[],b[] ;
int timee ;
} dicti[] ;
const int INF = ;
int edge[][] ;
int dist[] ;
int n ;
bool vis[] ;
char ch[] ; void dijkstra()
{
for(int i = ; i < n ; i++)
dist[i] = edge[][i],vis[i] = false ;
vis[] = true ;
dist[] = ;
for(int i = ; i < n- ; i++)
{
int minn = INF , u = ;
for(int j = ; j < n ; j++)
{
if(!vis[j] && dist[j] < minn)
{
u = j ;
minn = dist[j] ;
}
}
vis[u] = true ;
for(int j = ; j < n ; j++)
{
if(!vis[j] && dist[j] > dist[u]+edge[u][j])
dist[j] = dist[u]+edge[u][j] ;
}
}
}
int main()
{
while(~scanf("%d",&n) && n)
{
for(int i = ; i < n ; i++)
{
scanf("%d %s",&dicti[i].timee,ch) ;
int len = strlen(ch) ;
for(int k = ,j = len- ; k < ; j--, k++)
{
dicti[i].f[k] = ch[k] ;
dicti[i].b[-k] = ch[j] ;
}
dicti[i].f[] = dicti[i].b[] = '\0' ;
}
for(int i = ; i < n ; i++)
{
for(int j = ; j < n ; j++)
{
edge[i][j] = INF ;
if(i == j) continue ;
if(strcmp(dicti[i].b,dicti[j].f) == )
edge[i][j] = dicti[i].timee ;
}
}
dijkstra() ;
if(dist[n-] == INF) printf("-1\n") ;
else printf("%d\n",dist[n-]) ;
}
return ;
}
ZOJ 2750 Idiomatic Phrases Game(Dijkstra)的更多相关文章
- HDU - 1546 ZOJ - 2750 Idiomatic Phrases Game 成语接龙SPFA+map
Idiomatic Phrases Game Tom is playing a game called Idiomatic Phrases Game. An idiom consists of sev ...
- zoj 2750 Idiomatic Phrases Game
迪杰斯特拉单源最短路算法.对成语进行预处理.做出邻接矩阵即可. #include<cstdio> #include<cstring> #include<cmath> ...
- 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...
- 翻译《Writing Idiomatic Python》(五):类、上下文管理器、生成器
原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...
- 翻译《Writing Idiomatic Python》(四):字典、集合、元组
原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...
- 翻译《Writing Idiomatic Python》(三):变量、字符串、列表
原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- 翻译《Writing Idiomatic Python》(一):if语句、for循环
开篇废话 这是在美国Amazon上评价很不错的一本书,其实严格来说这可能不算书,而是一本小册子.就像书名一样,里面的内容主要是用一些例子讲述地道的Python的代码是怎样写的.书中把很多例子用不良风格 ...
- 翻译《Writing Idiomatic Python》(二):函数、异常
原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...
随机推荐
- JAXB - The JAXB Context
As we have seen, an object of the class JAXBContext must be constructed as a starting point for othe ...
- mount命令详解
http://tutu.spaces.eepw.com.cn/articles/article/item/70737 挂接命令(mount) 首先,介绍一下挂接(mount)命令的使用方法,mount ...
- DOM方式解析XML文件实例
books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore> &l ...
- 牵扯较多属性和方法的类题目,很简单的题目本来不想发的,如果有同学学到这个题目感觉太长不愿敲代码,copy走我的即可~不过还是建议自己打一打
/* 3.设计一个"学生"类 1> 属性 * 姓名 * 生日 * 年龄 * 身高(单位是m) * 体重(单位是kg) * 性别 * C语言成绩 * OC成绩 * iOS成绩 ...
- 输出一个等边三角形的字母阵,等边三角形的两腰为字母A,往里靠依次字母大一个(详细题目文章中描述)
题目简单的描述就是输出这么一个金字塔型的字母阵(等边三角形) /* A ABA ABCBA */ /* //解法①:对称轴法 #import <stdio.h> int main() { ...
- Linq 查询 与方法调用
通常,使用linq查询时需要一个实现IQueryable<T> 的查询对象 public class DataA<T> : IQueryable<T> {....} ...
- 禁用Linux bash rm --force
防止无意的Linux bash rm --force 二.禁用rm -rf 因为rm -rf 删除文件的时候,经常会不小心将系统文件或者多个有用的目录删除掉.有两种方法:1,每次删除都用-i(inte ...
- 霍纳法则(Horner's rule)
卡在hdu 1402 的高精度乘法了,要用FFT(快速傅里叶变换),然后看到了这个霍纳法则,顺便就写下来了. 霍纳法则:求多项式值的一个快速算法. 简单介绍: 假设有n+2个数 , a0,a1,a2, ...
- Xml通用操作类
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml ...
- mysql 高性能
第一章节:共享锁(读锁),排他锁(写锁) 查询数据表所使用的存储引擎:show table status like '表名' \G 转换数据表的存储引擎:alter table 表名 engine=引 ...