HDU - 1874 -最短路问题
2017-05-31 15:38
204 查看
三种方法
1 dijkstra的堆优化
2 bellman的队列优化
3 floyd
1 dijkstra的堆优化
2 bellman的队列优化
3 floyd
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <queue> #include <stack> #include <string> using namespace std; const int maxn=300; struct Node { int w,to; Node(int _a,int _b){w=_a;to=_b;} }; vector<Node>G[maxn]; void init() { for(int i=0;i<maxn;i++) G[i].clear(); } struct cmp { bool operator()(pair<int,int>a,pair<int,int>b){ return a.first>b.first; }; }; int main() { int m,n; int a,b,c; while(cin>>m>>n) { init(); for(int i=1;i<=n;i++) {cin>>a>>b>>c; G[a].push_back(Node(c,b)); G[b].push_back(Node(c,a)); } cin>>a>>b; priority_queue<pair<int,int> ,vector<pair<int,int> >,cmp>q; bool vis[maxn]; int d[maxn]; memset(vis,false,sizeof(vis)); memset(d,0x3f,sizeof(d)); q.push(make_pair(0,a)); d[a]=0; vis[a]=true; while(!q.empty()) { int u=q.top().second; q.pop(); vis[u]=false; for(int i=0;i<G[u].size();i++) { int s=G[u][i].to; if(d[s]>G[u][i].w+d[u]) { d[s]=G[u][i].w+d[u]; if(!vis[s]) { q.push(make_pair(d[s],s)); vis[s]=true; } } } } if(d[b]==0x3f3f3f3f) puts("-1"); else cout<<d[b]<<endl; } return 0; }
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <queue> #include <stack> #include <string> using namespace std; const int maxn=300; struct Node { int w,to; Node(int _a,int _b){w=_a;to=_b;} }; vector<Node>G[maxn]; void init() { for(int i=0;i<maxn;i++) G[i].clear(); } int main() { int m,n; int a,b,c; while(cin>>m>>n) { init(); for(int i=1;i<=n;i++) {cin>>a>>b>>c; G[a].push_back(Node(c,b)); G[b].push_back(Node(c,a)); } cin>>a>>b; queue<int>q; bool vis[maxn]; int d[maxn]; memset(vis,false,sizeof(vis)); memset(d,0x3f,sizeof(d)); q.push(a); d[a]=0; vis[a]=true; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=false; for(int i=0;i<G[u].size();i++) { int s=G[u][i].to; if(d[s]>G[u][i].w+d[u]) { d[s]=G[u][i].w+d[u]; if(!vis[s]) { q.push(s); vis[s]=true; } } } } if(d[b]==0x3f3f3f3f) puts("-1"); else cout<<d[b]<<endl; } return 0; }
#include<iostream> #include<cstdio> #include<list> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<stack> #include<map> #include<vector> #include<cmath> #include<memory.h> #include<set> using namespace std; int dp[202][202]; int main() { //ios::sync_with_stdio(false); int m,n; int a,b,c; while(cin>>m>>n) {memset(dp,0x3f,sizeof(dp)); for(int i=0;i<n;i++) {cin>>a>>b>>c; if(c<dp[a][b]) {dp[a][b]=c; dp[b][a]=c;} } for(int i=0;i<m;i++) dp[i][i]=0; for(int k=0;k<m;k++) { for(int i=0;i<m;i++) { for(int j=0;j<m;j++) dp[i][j]=min(dp[i][k]+dp[k][j],dp[i][j]); } } cin>>a>>b; if(dp[a][b]==0x3f3f3f3f) puts("-1"); else cout<<dp[a][b]<<endl;} retu e820 rn 0; }
相关文章推荐
- 最短路问题 以hdu1874为例
- HDU_1874_畅通工程续_最短路问题
- HDU 1874 畅通工程续(最短路问题 Dijkstra算法) O(V*E)
- hdu 1874 最短路问题 地杰斯特拉算法及其heap优化
- 【解题报告】HDU 1874 畅通工程续 -- Dijkstra算法详解 单源点最短路问题
- HDU_1874——最短路问题,Dijkstra算法模版
- 最短路问题 以hdu1874为例
- HDU-3790-最短路问题
- HDU - 2680 - Choose the best route (经典最短路问题dijkstra算法!!)
- HDU 5636 关键点的 floyd 最短路问题
- HDU-2112 HDU Today 最短路问题
- hdu 1548 a strange lift 迪杰斯特拉 最短路问题
- hdu-1874 畅通工程续 最短路径问题
- HDU 3631(Shortest Path) 最短路问题 (Floyd)
- HDU 2066 一个人的旅行 最短路问题
- HDU - 2544 - 最短路 (最基础单源最短路问题!!dijkstra+floyd+SPFA)
- HDU2544最短路问题Floyd-warshall Algorithm做法
- hdu 2544 最短路问题
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
- hdu3790双权值最短路问题