POJ1847 floyd求最短路徑

2022-09-08 16:36:24 字數 2637 閱讀 4976

題意:這題關鍵是題意理解了就會做了。

大致題意:現在有一鐵路網路,有n個交叉點,和一些開關。通過開關可以改變路線方向,使其能駛向其他交叉點。

開關的初始狀態已知,即(初始直接某兩點直接相連)。a到b.

問從出發點到目的地最少要動多少開關才能到達。

分析:想想就會發現是最短路問題。假如要從1--3如果有直接連線的邊則不要動開關,如果要通過1-2,2-3則需要懂開關一次。這題就是找從出發點到目的地最少要動多少開關才能到達。

演算法:dijkstra||floyd都行。這裡用floyd,反正資料不大才100.不過要改下狀態方程。接存在的邊權設為0,間接相連的邊,其權設為1,那麼從出發點到目的地的最短路也就記錄了最少要用的開關數。

dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]).

view code

//

i'm lanjiangzhou//c

#include #include

#include

#include

#include

#include

//c++

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

//*************************output*************************

#ifdef win32

#define int64 "%i64d"

#define uint64 "%i64u"

#else

#define int64 "%lld"

#define uint64 "%llu"

#endif

//**************************constant***********************

#define inf 0x3f3f3f3f

#define eps 1e-8

#define pi acos(-1.)

#define pi2 asin (1.);typedef

long

long

ll;//

typedef __int64 ll;

//codeforces

typedef unsigned int

ui;typedef unsigned

long

long

ui64;

#define mp make_pairtypedef vector

vi;typedef pair

pii;

#define pb push_back

#define mp make_pair

//***************************sentence************************

#define cl(a,b) memset (a, b, sizeof (a))

#define sqr(a,b) sqrt ((double)(a)*(a) + (double)(b)*(b))

#define sqr3(a,b,c) sqrt((double)(a)*(a) + (double)(b)*(b) + (double)(c)*(c))

//****************************function************************

template double dis(t va, t vb)

template

inline t integer_len(t v)

template

inline t square(t va, t vb)

//aply for the memory of the stack

//#pragma comment (linker, "/stack:1024000000,1024000000")

//end

const

int maxn = 200

;int

dis[maxn][maxn];

intn,a,b;

void

floyd()}}

}int

main()

dis[i][i]=0

; }

intm;

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

else

if(j==1

) dis[i][x]=0

; }

}floyd();

if(dis[a][b]==inf)

else printf("

%d\n

",dis[a][b]);

}return0;

}

Floyd求最短路

傳送門 題意 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。再給定k個詢問,每個詢問包含兩個整數x和y,表示查詢從點x到點y的最短距離,如果路徑不存在,則輸出 impossible 資料保證圖中不存在負權迴路。輸入格式 第一行包含三個整數n,m,k 接下來m行,每行包含三個整...

Floyd求最短路

路徑矩陣 通過乙個圖的權值矩陣求出它的每兩點間的最短路徑矩陣。從圖的帶權鄰接矩陣a a i,j n n開始,遞迴地進行n次更新,即由矩陣d 0 a,按乙個公式,構造出矩陣d 1 又用同樣地公式由d 1 構造出d 2 最後又用同樣的公式由d n 1 構造出矩陣d n 矩陣d n 的i行j列元素便是i號...

AcWing Floyd求最短路 Floyd

時 空限制 1s 64mb 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。再給定k個詢問,每個詢問包含兩個整數x和y,表示查詢從點x到點y的最短距離,如果路徑不存在,則輸出 impossible 資料保證圖中不存在負權迴路。第一行包含三個整數n,m,k 接下來m行,每行包含三...