POJ 1847 Tram 單源最短路徑

2021-06-22 06:25:40 字數 906 閱讀 8778

題意:軌道網,有若干轉換器,每個轉換器都和其他若干轉換器相連,轉換器初始指向第乙個與其相連的轉換器。問要到達終點需要最少轉換多少次?

思路:可以用dijkstra單源最短路來做,把軌道網看做有向圖(因為1第乙個指向2,2的第乙個不一定指向1),當前轉換器處始指向的那個轉換器之間的路徑權值為0,其他路徑權值為1,求一次起點到終點的最短路,結果就是最少轉換次數,注意可能沒有路徑,這時要輸出-1

**:

/*poj 1847

264k 0ms

*/#include#include#include#define maxn 105

#define max_int 2147483647

using namespace std;

int n,gra[maxn][maxn],dist[maxn],sta,fin;

void init()

} memset(dist , 1 , sizeof(dist));//這樣可以整體賦乙個較大的值

dist[sta] = 0;

}int dijkstra()

; for(int i = 1;i <= n;i ++)

mark[tj] = true;

for(int j = 1;j <= n;j ++)

if(!mark[j] && gra[tj][j] > -1)

dist[j] = min(dist[j] , dist[tj] + gra[tj][j]);

} if(dist[fin] == dist[0])

return -1;

return dist[fin];

}int main()

{ init();

cout<

POJ 1847 Tram 最小費用流

題意 給你n個點,告訴你每個點u可以到達的點v,但是可以到達的點又分兩類 一類可以直接到達 另一類要經過一次 轉換 後可以到達。現在問你點a到點b至少要 轉換 幾次能到達。如果a不能到b則輸出 1 否則輸出要 轉換 的最少次數。思路 最小費用最大流 建圖 1 每個點向他可以到的第乙個點連,和他可以到...

POJ1847 floyd求最短路徑

題意 這題關鍵是題意理解了就會做了。大致題意 現在有一鐵路網路,有n個交叉點,和一些開關。通過開關可以改變路線方向,使其能駛向其他交叉點。開關的初始狀態已知,即 初始直接某兩點直接相連 a到b.問從出發點到目的地最少要動多少開關才能到達。分析 想想就會發現是最短路問題。假如要從1 3如果有直接連線的...

單源最短路

題目描述 給出乙個有向圖,請輸出從某一點出發到所有點的最短路徑長度。輸入第一行包含三個整數n m s,分別表示點的個數 有向邊的個數 出發點的編號。接下來m行每行包含三個整數fi gi wi,分別表示第i條有向邊的出發點 目標點和長度。輸出n行,每行n個用空格分隔的整數,其中第i個整數表示從點s出發...