题目链接:http://poj.org/problem?id=3653

思路:题目意思很简单,就是二维平面上的图,要求起点到终点的最短路。建图略坑,需要坐标映射,化二维为一维。然后就是Dijkstra求最短路了。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define MAXN 888
#define inf 1<<30 struct Edge{
int v,w;
Edge(int vv,int ww):v(vv),w(ww){}
}; vector<vector<Edge> >G;
int n,m; int dist[MAXN];
bool mark[MAXN]; bool Dijkstra(int vs,int vt)
{
fill(dist,dist+vt+,inf);
memset(mark,false,sizeof(mark));
dist[vs]=;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >que;
que.push(make_pair(,vs));
while(!que.empty()){
pair<int,int>pp=que.top();
que.pop();
int d=pp.first,u=pp.second;
if(mark[u])continue;
mark[u]=true;
for(int i=;i<G[u].size();i++){
int v=G[u][i].v,w=G[u][i].w;
if(mark[v])continue;
if(d+w<dist[v]){
dist[v]=w+d;
que.push(make_pair(dist[v],v));
}
}
}
return dist[vt]<inf;
} int main()
{
// freopen("1.txt","r",stdin);
int x,y;
char ch;
while(~scanf("%d%d",&n,&m)){
if(n==&&m==)break;
G.clear();
G.resize((n+)*(m+)+);
for(int i=;i<n;i++){
for(int j=;j<m;j++){
scanf("%d %c",&x,&ch);
if(x==)continue;
if(ch=='*'){
G[i*(m+)+j].push_back(Edge(i*(m+)+j+,/x));
G[i*(m+)+j+].push_back(Edge(i*(m+)+j,/x));
}else if(ch=='>'){
G[i*(m+)+j].push_back(Edge(i*(m+)+j+,/x));
}else if(ch=='<')
G[i*(m+)+j+].push_back(Edge(i*(m+)+j,/x));
}
for(int j=;j<=m;j++){
scanf("%d %c",&x,&ch);
if(x==)continue;
if(ch=='*'){
G[i*(m+)+j].push_back(Edge(i*(m+)+j+m+,/x));
G[i*(m+)+j+m+].push_back(Edge(i*(m+)+j,/x));
}else if(ch=='^'){
G[i*(m+)+j+m+].push_back(Edge(i*(m+)+j,/x));
}else if(ch=='v')
G[i*(m+)+j].push_back(Edge(i*(m+)+j+m+,/x));
}
}
for(int j=;j<m;j++){
scanf("%d %c",&x,&ch);
if(x==)continue;
if(ch=='*'){
G[n*(m+)+j].push_back(Edge(n*(m+)+j+,/x));
G[n*(m+)+j+].push_back(Edge(n*(m+)+j,/x));
}else if(ch=='>'){
G[n*(m+)+j].push_back(Edge(n*(m+)+j+,/x));
}else if(ch=='<'){
G[n*(m+)+j+].push_back(Edge(n*(m+)+j,/x));
}
}
if(Dijkstra(,(n+)*(m+)-)){
printf("%d blips\n",dist[(n+)*(m+)-]);
}else
puts("Holiday");
}
return ;
}

poj 3653(最短路)的更多相关文章

  1. Heavy Transportation POJ 1797 最短路变形

    Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...

  2. POJ 3653 &amp; ZOJ 2935 &amp; HDU 2722 Here We Go(relians) Again(最短路dijstra)

    题目链接: PKU:http://poj.org/problem? id=3653 ZJU:problemId=1934" target="_blank">http ...

  3. poj 1847 最短路简单题,dijkstra

    1.poj  1847  Tram   最短路 2.总结:用dijkstra做的,算出a到其它各个点要改向的次数.其它应该也可以. 题意: 有点难懂.n个结点,每个点可通向ki个相邻点,默认指向第一个 ...

  4. poj 1797(最短路变形)

    题目链接:http://poj.org/problem?id=1797 思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量.其实就是一最短路的变形,定义wei ...

  5. poj 3013 最短路变形

    http://poj.org/problem?id=3013 给出n个点,m个边.给出每个点的权值,每个边的权值.在m条边中选n-1条边使这n个点成为一棵树,root=1,求这棵树的最小费用,费用=树 ...

  6. poj 2449 k短路+A*算法

    http://poj.org/problem?id=2449 K短路的定义: 1.如果起点终点相同,那么0并不是最短路,而是要出去一圈回来之后才是最短路,那么第K短路也是一样. 2.每个顶点和每条边都 ...

  7. poj 3463 最短路与次短路&&统计个数

    题意:求最短路和比最短路长度多1的次短路的个数 本来想图(有)方(模)便(版)用spfa的,结果妹纸要我看看dijkstra怎么解.... 写了三遍orz Ver1.0:堆优化+邻接表,WA //不能 ...

  8. POJ 1511 最短路spfa

    题很简单 就是有向图中求给出的源点到其余所有点的最短路的和与其余所有点到源点的最短路之和 一开始以为dij对于正权图的单源最短路是最快的 写了一发邻接表的dij 结果超时 把所有的cin改成scanf ...

  9. poj 1502 最短路+坑爹题意

    链接:http://poj.org/problem?id=1502 MPI Maelstrom Time Limit: 1000MS   Memory Limit: 10000K Total Subm ...

随机推荐

  1. 一个用于将sql脚本转换成实体类的js代码

    以前写过一段C#,苦于编译才能用.这样的小工具最好是用脚本语言来编写,易于执行,也易于修改. js 代码 convert.js ------------------------------------ ...

  2. 乐鑫esp8266的串口通讯驱动源文件,nonos和rtos版本

    目录 一.前言: 二.esp8266的串口分布情况: 三.esp8266的串口通讯时候,应该怎么接线: 四.esp8266的NONOS非系统,串口编程: 五.esp8266的RTOS实时系统,串口编程 ...

  3. UIActivityViewController实现系统原生分享

    代码地址如下:http://www.demodashi.com/demo/11042.html 一.效果预览 二.接下来介绍UIActivityViewController,跟我动手做 1.创建要分享 ...

  4. Linux-查看C语言手册及man的特殊用法

    man命令可以查看c语言库函数的函数原型, 比如 $ man malloc 如果显示 "No manual entry for malloc", 则需要安装 "man-p ...

  5. Asp.Net MVC项目通过Git同步到新开发设备上后无法作为网站启动

    右键项目名->属性->启动项目->单启动项目,在下拉框中选择你的网站主项目就可以了.(由于用的英文版,所以翻译的内容可能略有差异)

  6. win8安装Visual C++ 2015 build tools闪退解决办法

    win8安装Visual C++ 2015 build tools闪退解决办法 安装Visual Studio 2015闪退问题也同样应用此解决办法. 1.控制面板——添加删除程序——启动关闭wind ...

  7. 两种方法一句代码隐藏Activity的标题栏

    把Activity的标题栏隐藏有两种方法.一种是在在Activity里面设置javacode.还有一种是在项目的清单文件AndroidManifest.xml中设置模版样式. 一.在Activity中 ...

  8. Lintcode---区间求和 I

    给定一个整数数组(下标由 0 到 n-1,其中 n 表示数组的规模),以及一个查询列表.每一个查询列表有两个整数 [start, end] . 对于每个查询,计算出数组中从下标 start 到 end ...

  9. 实验c语言不同类型的指针互用(不推荐只是学习用)

    #include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, world\n"); ]; i ...

  10. unity, access sprite of UGUI Image

    首先需要using UnityEngine.UI; 然后调用下面语句就不报错了: Image.GetComponent<Image>().sprite 参考:http://answers. ...