已知了飛行器的起點和終點以及n個休息站的座標,問起點到終點的最短路徑是多少?
限制:飛行器不能長期飛行,必須中途在某結點下停下休息。(即連續飛行距離應不大於m)
歐濤師兄很想在師妹面前大展身手,你能幫助他解決這個問題嗎?
第一行輸入兩個數,整數n和浮點數m第二行輸入六個浮點數x1,y1,z1,x2,y2,z2。分別代表起點座標(x1,y1,z1)和終點座標(x2,y2,z2)
緊接著下面n行,每行依次輸入三個浮點數,代表休息站的座標(ai,bi,ci),休息站編碼依次為1,2……n。
輸出滿足條件的起點到終點的最短距離長度(結果保留三位小數)。示例1依次輸出飛行器經過站台的編碼(休息站編碼為1到n,起點編碼start,終點編碼end)
若不能到達終點輸出「-1」(無雙引號)
複製
4 50 0 0 6 6 0
-1 1 0
5 6 0
3 4 0
6 1 0
複製
8.606start 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...