歐濤最短路 (三維座標)

2022-05-03 12:27:24 字數 1514 閱讀 1097

已知了飛行器的起點和終點以及n個休息站的座標,問起點到終點的最短路徑是多少?

限制:飛行器不能長期飛行,必須中途在某結點下停下休息。(即連續飛行距離應不大於m)

歐濤師兄很想在師妹面前大展身手,你能幫助他解決這個問題嗎?

第一行輸入兩個數,整數n和浮點數m

第二行輸入六個浮點數x1,y1,z1,x2,y2,z2。分別代表起點座標(x1,y1,z1)和終點座標(x2,y2,z2)

緊接著下面n行,每行依次輸入三個浮點數,代表休息站的座標(ai,bi,ci),休息站編碼依次為1,2……n。

輸出滿足條件的起點到終點的最短距離長度(結果保留三位小數)。

依次輸出飛行器經過站台的編碼(休息站編碼為1到n,起點編碼start,終點編碼end)

若不能到達終點輸出「-1」(無雙引號)

示例1

複製

4 5

0 0 0 6 6 0

-1 1 0

5 6 0

3 4 0

6 1 0

複製

8.606

start 3 end

n<=600

先用座標預處理出路徑權值

#include#include

#include

#include

#include

#include

#define ll long long

#define m 999999999

using

namespace

std;

struct

node

p[1000

];double way[1000][1000],dis[1000

];int next1[1000],vis[1000

];int

n;double

m;stack

s;double

len(node a, node b)

void dijkstra(int

s) vis[s]=1;

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

}if(minn==m)

vis[k]=1

;

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

}}intmain()

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

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

//cout);

if(dis[n+1]==m)

cout

<<-1

cout

<<"

start";

while(s.size()!=1

)

cout

<<"

"<<"

end"

<}

return0;

}

三維最短路

傳送門 jelly 題意 在n n n的三維空間中每個點上都有乙個好果凍或乙個壞果凍。計算在不吃壞果凍的前提下,從 1,1,1 到 n,n,n 最少需要吃多少好果凍。做法 每個有好果凍的點與上下左右前後有好果凍的點有可達邊。用spfa即可。include using namespace std co...

歐濤最短路 記錄最短路徑

就是普通的最短路,建圖時點的距離小於m的連雙向邊,自認為寫了很多最短路卻不知道怎麼記錄最短路的路徑。在鬆弛裡記錄就好了,每次鬆弛都記錄被鬆弛點的前驅,這樣當乙個點多次鬆弛的時候,就可以多次更新它的前驅,當它無法鬆弛時就是最短路徑上的點,也就是記錄下來的最後一次鬆弛的前驅。然後從終點開始遍歷前驅,存在...

三維座標 偏轉 三維座標下的旋轉

三維座標的旋轉有以下幾種常見的表示形式 旋轉向量,旋轉矩陣,尤拉角,四元數,下面對這四種表示形式及其之間的轉換進行介紹 旋轉向量 通常為3x1的列向量,向量方向即為旋轉軸,向量的模表示繞軸逆時針旋轉的角度,如旋轉向量v a,b,c 那麼旋轉角度theta sqrt a2 b2 c2 旋轉軸z a t...