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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<queue>
  7. using namespace std;
  8. #define MAXN 888
  9. #define inf 1<<30
  10.  
  11. struct Edge{
  12. int v,w;
  13. Edge(int vv,int ww):v(vv),w(ww){}
  14. };
  15.  
  16. vector<vector<Edge> >G;
  17. int n,m;
  18.  
  19. int dist[MAXN];
  20. bool mark[MAXN];
  21.  
  22. bool Dijkstra(int vs,int vt)
  23. {
  24. fill(dist,dist+vt+,inf);
  25. memset(mark,false,sizeof(mark));
  26. dist[vs]=;
  27. priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >que;
  28. que.push(make_pair(,vs));
  29. while(!que.empty()){
  30. pair<int,int>pp=que.top();
  31. que.pop();
  32. int d=pp.first,u=pp.second;
  33. if(mark[u])continue;
  34. mark[u]=true;
  35. for(int i=;i<G[u].size();i++){
  36. int v=G[u][i].v,w=G[u][i].w;
  37. if(mark[v])continue;
  38. if(d+w<dist[v]){
  39. dist[v]=w+d;
  40. que.push(make_pair(dist[v],v));
  41. }
  42. }
  43. }
  44. return dist[vt]<inf;
  45. }
  46.  
  47. int main()
  48. {
  49. // freopen("1.txt","r",stdin);
  50. int x,y;
  51. char ch;
  52. while(~scanf("%d%d",&n,&m)){
  53. if(n==&&m==)break;
  54. G.clear();
  55. G.resize((n+)*(m+)+);
  56. for(int i=;i<n;i++){
  57. for(int j=;j<m;j++){
  58. scanf("%d %c",&x,&ch);
  59. if(x==)continue;
  60. if(ch=='*'){
  61. G[i*(m+)+j].push_back(Edge(i*(m+)+j+,/x));
  62. G[i*(m+)+j+].push_back(Edge(i*(m+)+j,/x));
  63. }else if(ch=='>'){
  64. G[i*(m+)+j].push_back(Edge(i*(m+)+j+,/x));
  65. }else if(ch=='<')
  66. G[i*(m+)+j+].push_back(Edge(i*(m+)+j,/x));
  67. }
  68. for(int j=;j<=m;j++){
  69. scanf("%d %c",&x,&ch);
  70. if(x==)continue;
  71. if(ch=='*'){
  72. G[i*(m+)+j].push_back(Edge(i*(m+)+j+m+,/x));
  73. G[i*(m+)+j+m+].push_back(Edge(i*(m+)+j,/x));
  74. }else if(ch=='^'){
  75. G[i*(m+)+j+m+].push_back(Edge(i*(m+)+j,/x));
  76. }else if(ch=='v')
  77. G[i*(m+)+j].push_back(Edge(i*(m+)+j+m+,/x));
  78. }
  79. }
  80. for(int j=;j<m;j++){
  81. scanf("%d %c",&x,&ch);
  82. if(x==)continue;
  83. if(ch=='*'){
  84. G[n*(m+)+j].push_back(Edge(n*(m+)+j+,/x));
  85. G[n*(m+)+j+].push_back(Edge(n*(m+)+j,/x));
  86. }else if(ch=='>'){
  87. G[n*(m+)+j].push_back(Edge(n*(m+)+j+,/x));
  88. }else if(ch=='<'){
  89. G[n*(m+)+j+].push_back(Edge(n*(m+)+j,/x));
  90. }
  91. }
  92. if(Dijkstra(,(n+)*(m+)-)){
  93. printf("%d blips\n",dist[(n+)*(m+)-]);
  94. }else
  95. puts("Holiday");
  96. }
  97. return ;
  98. }

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. 算法笔记_161:算法提高 十进制数转八进制数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. 样例输入 9274 样 ...

  2. vue 不能检测数组长度 值变化原因解析

    1.vue不能检测数组长度或者值的变化 (1)数组长度变化 未检测到 <!DOCTYPE html> <html lang="en"> <head&g ...

  3. ES6 let用法

    1.实现块作用域 2.不存在变量提升. ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域.凡是在声明之前就使用这些变量,就会报错.

  4. [物理题+枚举] hdu 4445 Crazy Tank

    题意: 给你N个炮弹的发射速度,以及炮台高度H和L1,R1,L2,R2. 问任选发射角度.最多能有几个炮弹在不打入L2~R2的情况下打入L1~R1 注意:区间有可能重叠. 思路: 物理题,发现单纯的依 ...

  5. Struts 第一个Hello页面

    在工程目录的src下新建 struts.xml   <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...

  6. Drupal所能够理解的资源

    Drupal能够识别哪些资源类型? profile,不知道怎么翻译,应该是指安装类型,固定地存放于profiles目录下. module,模块,可以存在于多个目录下:modules.profiles/ ...

  7. linux下查看cc攻击

    什么是CC攻击?CC攻击就是利用大量代理服务器对目标计算机发起大量连接,导致目标服务器资源枯竭造成拒绝服务.那么如何判断查询CC攻击呢?本文主要介绍了一些Linux下判断CC攻击的命令. 查看所有80 ...

  8. Event-Souring模式

    Event-Sourcing模式使用仅附加存储来记录或描写叙述域中数据所採取的动作,从而记录完整的一系列系列事件,而不是仅存储实体的当前状态.由于存储包括全部的事件,能够用来具体化域对象. Event ...

  9. Atitit.index manager api design 索引管理api设计

    Atitit.index manager api design 索引管理api设计 1. kw 1 1.1. 索引类型 unique,normal,fulltxt 1 1.2. 聚集索引(cluste ...

  10. 如何卸载Mysql

    mysql安装的时候会出现各种问题,尤其对新手,卸载不干净,重新安装会受到影响.也不能有点问题就重装系统吧!现在提供一种通过删除注册表的方式卸载mysql! 运行regedit打开注册表,搜索mysq ...