题目链接: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. mui ajax方法

    mui ajax方法详解: mui提供了mui.ajax,在此基础上有分装出mui.get()/mui.getJSON()/mui.post()三个方法. mui.ajax( url [,settin ...

  2. 07-spring学习-bean的其他配置(了解)

    首先需要明确,默认情况下,只要在applicationContext.xml文件里面配置的时候自动进行构造方法初始化. 但是用户也可以实现自己的配置,让其在第一次使用的时候进行初始化,这种操作叫做 延 ...

  3. oracle将一个表中字段的值赋值到另一个表中字段(批量)

    面积表中数据错误,现将面积表中的sfmj字段的值改为居民信息表中匹配字段的值 update (select s.name name1,s2.name name2 from simple s,simpl ...

  4. 老生常谈:DEDECMS安全设置问题分享

    Dedecms安全问题已经是老生常谈了.虽然无忧主机php虚拟主机安全性是很高的,但是黑客总是利用dedecms的漏洞进行注入.其实有些时候,是我们对dedecms的安全设置不到位导致的.今天无忧主机 ...

  5. 事件总线框架---Otto

    我们假设这样一种业务场景,现在在做一款及时聊天应用,我们在聊天页面进行收发信息,同时也要实时更新前一页面的聊天记录,这时我们该如何去实现?说说我以前的实现策略,我使用的是广播接收器BroadCastR ...

  6. unity3d通过代码动态创建销毁游戏对象

    只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.Create ...

  7. unity3d创建window

    unity3d创建windwo的方法如下: GUILayout.Window (, new Rect (50, 50, 200, 100), Func1, "窗口1"); 第一个参 ...

  8. docker容器互连

    三种方式 1.使用容器连接的示例如下: $ docker run --name some-app --link itbilu-mysql:mysql -d application-that-uses- ...

  9. php安全处理

    1.php.ini 修改 open_basedir='d:\wwwroot' //配置只能访问指定的网站目录 2.php.ini 修改 disable_funcitons=system,passthr ...

  10. apache与和mysql重启命令

    修改linux服务器的http配置之后,必须重启Apache服务. 命令为: /etc/rc.d/init.d/httpd restart chown -R mysql:mysql 目录名 改变文件属 ...