洛谷——P1744 采購特價商品
阿新 • • 發佈:2017-12-24
nbsp rdquo adg 直線 ring apple 格式 fine getc
P1744 采購特價商品
題目背景
《愛與愁的故事第三彈·shopping》第一章。
題目描述
中山路店山店海,成了購物狂愛與愁大神的“不歸之路”。中山路上有n(n<=100)家店,每家店的坐標均在-10000~10000之間。其中的m家店之間有通路。若有通路,則表示可以從一家店走到另一家店,通路的距離為兩點間的直線距離。現在愛與愁大神要找出從一家店到另一家店之間的最短距離。你能幫愛與愁大神算出嗎?
輸入輸出格式
輸入格式:
共n+m+3行:
第1行:整數n
第2行~第n+1行:每行兩個整數x和y,描述了一家店的坐標
第n+2行:整數m
第n+3行~第n+m+2行:每行描述一條通路,由兩個整數i和j組成,表示第i家店和第j家店之間有通路。
第n+m+3行:兩個整數s和t,分別表示原點和目標店
輸出格式:
僅一行:一個實數(保留兩位小數),表示從s到t的最短路徑長度。
輸入輸出樣例
輸入樣例#1: 復制5 0 0 2 0 2 2 0 2 3 1 5 1 2 1 3 1 4 2 5 3 5 1 5輸出樣例#1: 復制
3.41
說明
100%數據:n<=100,m<=1000
floyd
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define N 101 #define maxn 999999 using namespace std; double f[N][N]; int n,m,s,t,a,b,tot,x[N],y[N]; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int main() { n=read(); for(int i=1;i<=n;i++) x[i]=read(),y[i]=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=maxn; m=read(); for(int i=1;i<=m;i++) { a=read(),b=read(); f[a][b]=sqrt(pow(x[a]-x[b],2)+pow(y[a]-y[b],2)); f[b][a]=sqrt(pow(x[a]-x[b],2)+pow(y[a]-y[b],2)); } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) f[i][j]=min(f[i][j],f[i][k]+f[k][j]); a=read(),b=read(); printf("%.2lf",f[a][b]); return 0; }
洛谷——P1744 采購特價商品