題意:軌道網,有若干轉換器,每個轉換器都和其他若干轉換器相連,轉換器初始指向第乙個與其相連的轉換器。問要到達終點需要最少轉換多少次?
思路:可以用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出發...