HDU 2722:Here We Go(relians) Again
来源:互联网 发布:linux设置静态ip不生效 编辑:程序博客网 时间:2024/05/20 20:20
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2722
题目翻译:
不得不吐槽,这题题目太长了,还是英文,看的吐了,不过最终还是看明白了。
给出N,M; 则就有(N+1)行,(M+1)列
然后分别给出的是
第一行中相邻列的关系
第二行与第一行同列点的关系
第二行中相邻列的关系
第三行与第二行同列点的关系
第三行中相邻列的关系
所以可以知道接下来会有2*N+1个字符串。
图中的字符,‘0’代表没有路
'1' ~ '9'代表这段路径的限速
*代表这是双向道路
>代表的是由西向东的道路
<代表的是由东向西的道路
^代表的是由南到北的道路
v代表的是由北到南的道路
图中所有道路的长度都是2520.
然后求左上角的点到右下角的点的最短路。
存在输出答案
不存在输出Holiday
AC代码:
#include <iostream>#include <stdio.h>#include <string.h>#include <queue>using namespace std;const int maxn = 500;const int INF = 450*450*2520+100;int Map[maxn][maxn];char str[500];int N,M; ///N行M列的城市。void initMap(){ for(int i = 0; i < (N+1)*(M+1); i++) { Map[i][i] = 0; for(int j = i+1; j < (N+1)*(M+1); j++) Map[i][j] = Map[j][i] = INF; }}int dist[maxn],vis[maxn];void spfa(){ for(int i = 0; i < (N+1)*(M+1); i++) { dist[i] = INF; vis[i] = 0; } dist[0] = 0; vis[0] = 1; queue<int>qu; qu.push(0); while(!qu.empty()) { int u = qu.front(); qu.pop(); vis[u] = 0; for(int i = 0; i < (N+1)*(M+1); i++) { if(Map[u][i] < INF) { if(dist[u] + Map[u][i] < dist[i]) { dist[i] = dist[u] + Map[u][i]; if(vis[i] == 0) { vis[i] = 1; qu.push(i); } } } } }}int main(){ while(~scanf("%d%d",&N,&M)) ///每行有N+1个,每列有N+1个。 { if(N == 0 && M == 0) break; initMap(); getchar(); for(int i = 1; i <= 2*N+1; i++) { gets(str); int num,u,v; if(i%2 == 1) ///列与列之间的关系 { int row = i/2; ///行号 int id = 0; for(int j = 0; j < strlen(str); j++) { if(str[j] == ' ') continue; else if(str[j]>='0' && str[j]<='9') { if(str[j] == '0') num = INF; else num = str[j]-'0'; } else { u = id; v = ++id; u = row*(M+1)+u; v = row*(M+1)+v; if(str[j] == '*') Map[u][v] = Map[v][u] = num; else if(str[j] == '>') Map[u][v] = num; else if(str[j] == '<') Map[v][u] = num; } } } else { int id = 0; for(int j = 0; j < strlen(str); j++) { if(str[j] == ' ') continue; else if(str[j]>='0' && str[j]<='9') { if(str[j] == '0') num = INF; else num = str[j]-'0'; } else { v = i/2; ///行号 u = v - 1; ///行号 v = v*(M+1) + id; u = u*(M+1) + id; id++; if(str[j] == '*') { Map[u][v] = Map[v][u] = num; } else if(str[j] == '^') Map[v][u] = num; else if(str[j] == 'v') Map[u][v] = num; } } } } /*for(int i = 0; i < (N+1)*(M+1); i++) { for(int j = 0; j < (N+1)*(M+1); j++) { if(Map[i][j] == INF) printf("INF "); else printf("%d ",Map[i][j]); } printf("\n"); }*/ for(int i = 0; i < (N+1)*(M+1); i++) for(int j = 0; j < (N+1)*(M+1); j++) { if(Map[i][j] > 0 && Map[i][j] < INF) Map[i][j] = 2520/Map[i][j]; } spfa(); int d = (N+1)*(M+1)-1; if(dist[d] < INF) printf("%d blips\n",dist[d]); else printf("Holiday\n"); } return 0;}
阅读全文
0 0
- Here We Go(relians) Again hdu 2722
- HDU 2722 Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again
- hdu 2722 Here We Go(relians) Again
- HDU-2722-Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again
- HDU 2722:Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again (输入处理恶心)
- HDU 2722 Here We Go(relians) Again 最短路
- 【最短路】 HDU 2722 Here We Go(relians) Again
- HDU 2722 Here We Go(relians) Again (SPFA+建图)
- Here We Go(relians) Again
- POJ 3653 Here We Go (relians) Again
- 【最短路+dijkstra+spfa】杭电 hdu 2722 Here We Go(relians) Again
- HDU 2722Here We Go(relians) Again(dijk最短路)
- mybatis的一些笔记
- hdu 2082 找单词(二维01背包)
- Java static修饰属性(类变量)、static修饰方法(类方法)
- C++三大特性--继承
- discuzX 论坛列表页获取帖子内容页主题的pid
- HDU 2722:Here We Go(relians) Again
- hibernate多对多注解式开发
- DBCC CHECKDB修复异常表
- HDU 1213 How Many Tables [并查集]
- Node.js安装配置
- 第五周——项目一 自建算法库 “顺序栈”
- cocos creator学习(十四) websocket、onfire
- ST17H26移植软时钟代码
- 七月算法强化学习 第三课 学习笔记