1. 程式人生 > >洛谷——P1744 采購特價商品

洛谷——P1744 采購特價商品

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 采購特價商品