又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程**為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的**均為t。
圖例(從上而下)
機場 高速鐵路
飛機航線
注意:圖中並沒有
標出所有的鐵路與航線。
那麼car應如何安排到城市b的路線才能盡可能的節省花費呢?她發現這並不是乙個簡單的問題,於是她來向你請教。
找出一條從城市a到b的旅遊路線,出發和到達城市中的機場可以任意選取,要求總的花費最少。
輸入格式:
第一行為乙個正整數n(0<=n<=10),表示有n組測試資料。
每組的第一行有四個正整數s,t,a,b。
s(0接下來有s行,其中第i行均有7個正整數xi1,yi1,xi2,yi2,xi3,yi3,ti,這當中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分別是第i個城市中任意三個機場的座標,t i為第i個城市高速鐵路單位里程的**。
輸出格式:
共有n行,每行乙個資料對應測試資料。 保留一位小數
輸入樣例#1:
1輸出樣例#1:3 10 1 3
1 1 1 3 3 1 30
2 5 7 4 5 2 1
8 6 8 8 11 6 3
47.5直接算出各個機場之間的費用即可,然後用dijkstra做,這題floyed也可以過。
對於題目每個機場給三個點,我們需要用迭代法不斷交換三個點的位置:a-b-c --> b-c-a --> c-a-b使其滿足矩形關係。
判斷矩形我們可以用垂直關係。
1 #include 2 #include 3 #include 4 #include 5 #include 6#define inf 10000000
7#define ctoa(x) (((x-1)<<2)+1)
8#define distance(x1,y1,x2,y2) ((double)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))) //
自定義巨集,開根號操作
9using
namespace
std;
10double node[4050][4050]; //
node[i][j]=i點到j點的最短距離
11double t; //
t=飛機航線的單價,t=鐵路線路的單價
12int tx[3],ty[3
],t;
13double ans=inf;
14struct
city
15ct[105]; //
ct[i].x[j]=第i個城市第j個機場橫座標,ct[i].y[j]=第i個城市第j個機場縱座標
19void getfour(int c) //
獲取第c個城市第四個機場的座標
20
29 ct[c].x[3]=tx[0]-tx[1]+tx[2
];
30 ct[c].y[3]=ty[0]-ty[1]+ty[2
];
31}
32int min(int a1,int
b1)
33
37int
main()
38 //
注意出發點和目的地在同一城市的情況,直接輸出0.0
46int airport=s<<2; //
airport=機場數量
47for(i=1;i<=airport;i++)
48
52for(i=1;i<=s;i++)
53
64}
65for(i=1;i<=s;i++)
66
75}
76}
77//
floyd
78for(k=1;k<=airport;k++)
79
86}
87}
88for(i=0;i<4;i++)
89
93 cout
94}
95return
0;
96 }
洛谷P1027(Car的旅行路線)
又到暑假了,住在城市 a 的 car 想和朋友一起去城市旅遊。她知道每個城市都有 4 個飛機場,分別位於乙個矩形的 4 個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第 i 個城市中高速鐵路了的單位里程 為 t it i ti 任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為 ...
洛谷 P1027 Car的旅行路線
又到暑假了,住在城市 aa 的 carcar 想和朋友一起去城市 bb 旅遊。她知道每個城市都有 44 個飛機場,分別位於乙個矩形的 44 個頂點上,同乙個城市中 22 個機場之間有 11 條筆直的高速鐵路,第 ii 個城市中高速鐵路了的單位里程 為 t iti 任意兩個不同城市的機場之間均有航線,...
luogu1027 Car的旅行路線
題目描述 又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。圖例 從上而下 機場 ...