hdu 2112 HDU Today(floyd 算法)
来源:互联网 发布:手机淘宝店标制作教程 编辑:程序博客网 时间:2024/06/05 10:25
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112
题意:求两点的最短路径。
解题方案:由于顶点的数目只有150个,所以可以用floyd。
floyd算法实质是动态规划,状态转移方程dp[k][i][j]=min(dp[k-1][i][j],dp[k-1][i][k]+dp[k-1][k][j],dp[k][i][j]为从i到j可以经过1~k这些点的情况下的最短路径,则dp[0][i][j]即为从i到j不经过任何点的最短距离。有点类似背包问题。因为状态转移方程左边全是k,右边全是k-1,所以可以升序枚举k从而降成两维。(下面的代码是从0开始编号的,因为k的那一维已经降掉了,k在代码中只是起单纯的计数作用,所以从0开始对顶点编号没有什么影响)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <string>#include <cmath>#include <vector>#include <queue>#include <stack>#include <set>#include <map>using namespace std;#define FOR(i,k,n) for(int i=k;i<n;i++)#define FORR(i,k,n) for(int i=k;i<=n;i++)#define scan(a) scanf("%d",&a)#define scann(a,b) scanf("%d%d",&a,&b)#define scannn(a,b,c) scanf("%d%d%d",&a,&b,&c)#define mst(a,n) memset(a,n,sizeof(a))#define ll long long#define N 200#define mod 1000000007#define INF 0x3f3f3f3fconst double eps=1e-8;const double pi=acos(-1.0);map<string,int> mp;int dp[N][N];int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int m; while(cin>>m&&m!=-1) { mp.clear(); FOR(i,0,N) { FOR(j,0,N) { if(i==j) dp[i][j]=0; else dp[i][j]=INF; } } int idx=0; string s,e; cin>>s>>e; if(mp.find(s)==mp.end()) mp[s]=idx++; if(mp.find(e)==mp.end()) mp[e]=idx++; FOR(i,0,m) { string u,v; cin>>u>>v; if(mp.find(u)==mp.end()) mp[u]=idx++; if(mp.find(v)==mp.end()) mp[v]=idx++; int t; cin>>t; dp[mp[u]][mp[v]]=min(dp[mp[u]][mp[v]],t); dp[mp[v]][mp[u]]=min(dp[mp[v]][mp[u]],t); } FOR(k,0,idx) { FOR(i,0,idx) { FOR(j,0,idx) { dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); } } } if(dp[mp[s]][mp[e]]==INF) cout<<-1<<endl; else cout<<dp[mp[s]][mp[e]]<<endl; } return 0;}
0 0
- hdu 2112 HDU Today(floyd 算法)
- hdu 2112 HDU Today (floyd算法)
- hdu 2112 HDU Today(map+Floyd)
- HDU 2112 HDU Today(Floyd)
- HDU Today+迪杰斯特拉+floyd算法
- HDU 2112 HDU Today(最短路 SPFA Floyd-Warshall算法)
- HDU:2112 HDU Today(floyd求最短路径+变形题)
- HDU 2112 HDU Today(floyd-warshall+map)
- HDU 2112:HDU Today【Dijkstra & SPFA & Floyd】
- HDU 2112 HDU Today(dijkstra算法)
- HDOJ-2112HDU Today(Floyd+MAP)
- hdu2112 HDU Today (floyd+stl-map)
- HDU2112-HDU Today(Floyd & Dijkstra)
- 【最短路径-Floyd】hdu 2112 HDU Today
- HDU 2112 HDU Today 最短路问题map+floyd
- hdu 2112 HDU Today 最短路(Dijkstra算法)
- HDU 2112 HDU Today (Dijkstra算法)
- hdu 2112 HDU Today Dijkstra算法
- Java实现图片验证码
- 安装jenkins
- CodeForces 106C 【DP】
- 《ACM程序设计》书中题目
- 在Spring Boot中使用Spring-data-jpa实现分页查询
- hdu 2112 HDU Today(floyd 算法)
- Dubbox 编译
- android网络图片查看器
- IA32地址空间映射
- UNITY新手小游戏(二)
- Spring学习之基础知识
- MySQL中流程的控制
- Docker新手入门(docker 4周岁线下活动)
- 《ACM程序设计》书中题目 R