hdu1874 暢通工程續 Bellman-Ford演算法SPFA
連線:http://acm.hdu.edu.cn/showproblem.PHP?pid=1874
Problem Description
某省自從實行了很多年的暢通工程計劃後,終於修建了很多路。不過路多了也不好,每次要從一個城鎮到另一個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。
現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。
Input
本題目包含多組資料,請處理到檔案結束。
每組資料第一行包含兩個正整數N和M(0
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
//不斷的將s的鄰接點加入佇列,取出不斷的進行鬆弛操作,直到佇列為空
//如果一個結點被加入佇列超過n-1次,那麼顯然圖中有負環
#define Min(x,y) ( (x) < (y) ? (x) : (y) )
using namespace std;
const int maxn = 205;
const int INF = 0xffffff;
struct Node
{
int vex,weight;
Node(int _vex = 0,int _weight = 0) : vex(_vex),weight(_weight){}
};
vector<Node> G[maxn];
int dist[maxn],cnt[maxn],n,m;
bool inqueue[maxn];
void Init()
{
for(int i = 0 ; i < maxn ; ++i){
G[i].clear();
dist[i] = INF;
}
}
int SPFA(int s,int e)
{
int v1,v2,weight;
queue<int> Q;
memset(inqueue,false,sizeof(inqueue));//標記是否在佇列中
memset(cnt,0,sizeof(cnt));//加入佇列的次數
dist[s] = 0;
Q.push(s);//起點加入佇列
inqueue[s] = true;//標記
while(!Q.empty()){
v1 = Q.front();
Q.pop();
inqueue[v1] = false;//取消標記
for(int i = 0 ; i < G[v1].size() ; ++i){//搜尋v1的連結串列
v2 = G[v1][i].vex;
weight = G[v1][i].weight;
if(dist[v2] > dist[v1] + weight){ //鬆弛操作
dist[v2] = dist[v1] + weight;
if(inqueue[v2] == false){ //再次加入佇列
inqueue[v2] = true;
//cnt[v2]++; 判負環
//if(cnt[v2] > n) return -1;
Q.push(v2);
}
}
}
}
return dist[e];
}
int main()
{
int v1,v2,weight,s,e;
while(scanf("%d%d",&n,&m) != EOF)
{
Init();
for(int i = 0 ; i < m ; i++){
scanf("%d%d%d",&v1,&v2,&weight);
G[v1].push_back(Node(v2,weight));
G[v2].push_back(Node(v1,weight));
}
scanf("%d%d",&s,&e);
int ans = SPFA(s,e);
if(ans == INF)
printf("%d\n",-1);
else
printf("%d\n",ans);
}
return 0;
}
相關文章
- HDU杭電1874-暢通工程續(dijkstra演算法和Floyd演算法)演算法
- 演算法專題 | 10行程式碼實現的最短路演算法——Bellman-ford與SPFA演算法行程
- 暢通工程(並查集)並查集
- SPFA演算法演算法
- hdu 1232通暢工程
- 最短路-SPFA演算法&Floyd演算法演算法
- 【演算法導論】24.1 Bellman-Ford 演算法演算法
- SPFA演算法模板(C/C++)演算法C++
- 資料結構課程設計報告——暢通工程資料結構
- 暢購01——工程搭建
- 最短路演算法詳解(Dijkstra/SPFA/Floyd)演算法
- 「學習筆記」SPFA 演算法的最佳化筆記演算法
- POJ 1511 Invitation Cards(最短路spfa演算法)演算法
- hdu 4568 spfa 最短路演算法+旅行商問題演算法
- A星、Floyod、Bellman-Ford
- POJ 3592 Instantaneous Transference 圖論演算法tarjan+spfa圖論演算法
- POJ 3169(Bellman-Ford演算法,差分約束系統)演算法
- spfa最佳化
- SPFA && dijkstra 模版
- 軟體工程-團隊-工程-溝通軟體工程
- [原] Android持續優化 - 提高流暢度Android優化
- 851. spfa求最短路(用佇列優化bellman——ford演算法)佇列優化演算法
- 程式碼隨想錄演算法訓練營第63天 | SPFA演算法最佳化+變式演算法
- Linux檢查遠端埠是否通暢Linux
- HDU 4460 Friend Chains(map + spfa)AI
- Python 圖_系列之縱橫對比 Bellman-Ford 和 Dijkstra 最短路徑演算法Python演算法
- 華為暢享MAX評測:主打大屏和長續航,華為暢享Max值得買嗎?
- 通過Docker容器執行持續整合/持續部署Docker
- POJ 1511-Invitation Cards(SPFA)
- 最短路(DJsktra,spfa,flyd).mdJS
- 細說IOS工程架構(持續更新)iOS架構
- 【機器學習】【深度學習】【人工智慧】【演算法工程師】面試問題彙總(持續更新)機器學習深度學習人工智慧演算法工程師面試
- 如何實現 Android 短影片跨頁面的流暢續播?Android
- Counterpoint:iPhone 6連續10月成最暢銷手機iPhone
- bellman-ford 單源最短路問題 圖解圖解
- 讓Github暢通無阻,FastGithub1.0.0釋出GithubAST
- POJ 1724 ROADS(優先佇列+spfa)佇列
- 使用Canvas繪製簡單工程符號(續)Canvas符號