關於最短路

2021-07-05 16:30:57 字數 2672 閱讀 9443

把最近做的幾道最短路一起總結一下吧

poj1062

中文題,不解釋題意,對於渣渣來說,是先看別人題解後才做的,以酋長的允諾作為目標點,每乙個物品與替換物之間會有一條邊,由於交換有限制,所以建完圖後,以每乙個點為終點或是說最高點,先遍歷一次,把不能交換或間接交換的點去掉,然後再進行最短路尋找。實際就是把所有可能都搞了一遍找最短

還有另一種解法,dp

接下來幾道題都是floyed

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int inf=

0x7fffffff

;struct

pointt

p[205

];double dis[

205][

205];

double

dist

(pointt a,pointt b)

intmain

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

*/for

(int k=

1;k<=n;k++)

for(

int i=

1;i<=n;i++)

for(

int j=

1;j<=n;j++)

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

*/ cout<<

"scenario #"

<'<<

"frog distance = "

<<

setiosflags

(ios::fixed)<<

setprecision(3

)<2]

}

poj1125

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

105][

105];

intmain()}

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

*/for

(int k=

1;k<=n;k++)

for(

int i=

1;i<=n;i++)

for(

int j=

1;j<=n;j++)

minint maxlen=

0x3f3f3f3f

,sorce;

for(

int i=

1;i<=n;i++)

if(maxlen1(maxlen==

0x3f3f3f3f

)cout<<

"disjoint\n"

cout<' '<}return0;

}

poj2240

也可以跟poj1860那樣去解

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

double dis[

35][

35];

const

double eps=

1e-12

;mapint>mp;

intmain

() cin>>m;

while

(m--)

for(

int k=

1;k<=n;k++)

for(

int i=

1;i<=n;i++)

for(

int j=

1;j<=n;j++)

if(dis[i][j]-dis[i][k]*dis[k][j]dis[i][j]=dis[i][k]*dis[k][j];

bool flag=

false

;for

(int i=

1;i<=n;i++)

}printf

("case %d: "

,r++);

if(flag)

printf

("yes\n"

);else

printf

("no\n"

);}return0;

}

關於最短路

模板 void dij p.push make pair d 1 1 while p.empty 為啥想到用最小堆?因為每次都是找與源點最近的,vis為0的點,想到了用優先佇列找的快一點細節 d陣列用pair形式表示,pair的first是距離,second是點的下標。pair跟結構體差不多,如果用...

關於最短路 1

我們可以把邊帶有權值的圖稱為帶權圖。邊的權值可以理解為兩點之間的距離。一張圖任意兩點間會有不同的路徑相連。最短路徑就是指連線兩點的這些路徑中最短的一條。我們有四種方法求出兩個點間最短的路徑 分別是floyed warshall演算法 簡稱floyed演算法 dijkstra演算法 bellman f...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...