問題描述
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一 條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程**為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的**均為t。
那麼car應如何安排到城市b的路線才能盡可能的節省花費呢?她發現這並不是乙個簡單的問題,於是她來向你請教。
找出一條從城市a到b的旅遊路線,出發和到達城市中的機場可以任意選取,要求總的花費最少。
輸入格式
的第一行有四個正整數s,t,a,b。
s表示城市的個數,t表示飛機單位里程的**,a,b分別為城市a,b的序號,(1<=a,b<=s)。
接下來有s行,其中第i行均有7個正整數xi1,yi1,xi2,yi2,xi3,yi3,ti,這當中的(xi1,yi1),(xi2,yi2),(xi3,yi3)分別是第i個城市中任意三個機場的座標,t i為第i個城市高速鐵路單位里程的**。
輸出格式
共有n行,每行乙個資料對應測試資料,保留一位小數。
樣例輸入
11 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.55
資料規模和約定
0思路:
只有三個點,運用幾何平行關係求出第四個點,用對角點x和y都不相同的思路求出對角點,即三個點中必然有乙個點和兩個點要麼x相同,要麼y相同,這個點就是對角點。
如果x1和x4是對角關係,那麼x1+x4=x2+x3,y1+y4=y2+y3(平行關係)
建立陣列,把所有點之間的權值儲存,w[i][j]表示i到j的權值,把起始城市的四個點分別當做起點,就變成單源最短路徑演算法,使用dijstra演算法求出最短路徑,最後比較4個起點最小路徑值。
#include
#include
#include
#include
using
namespace std;
const
double inf =
99999999
;struct node
;vectorcp(
1);int s, t, a, b;
double w[
500]
[500];
doubled(
int x1,
int y1,
int x2,
int y2)
boolp(
int x1,
int y1,
int x2,
int y2,
int x3,
int y3)
else
}double
dij(
int start)
//dijkstra迪傑斯特拉演算法,不斷迭代求每個點距起點的最短距離,存入dij陣列
;fill
(dij, dij +
500, inf)
; dij[start]=0
;for
(int i =
1; i <= s *
4; i++
)//遍歷所有的點}if
(x ==-1
)break
; book[x]=1
;for
(int j =
1; j <= s *
4; j++
)//更新最短路徑 }}
double ans = inf;
for(
int i =
1; i <=
4; i++
)return ans;
}int
main()
if(p(x2, y2, x1, y1, x3, y3))if
(p(x3, y3, x1, y1, x2, y2)
)//乙個城市各點間的權值
w[(i -1)
*4+1
][(i -1)
*4+2
]= w[
(i -1)
*4+2
][(i -1)
*4+1
]=d(x1, y1, x2, y2)
* t_;
w[(i -1)
*4+1
][(i -1)
*4+3
]= w[
(i -1)
*4+3
][(i -1)
*4+1
]=d(x1, y1, x3, y3)
* t_;
w[(i -1)
*4+1
][(i -1)
*4+4
]= w[
(i -1)
*4+4
][(i -1)
*4+1
]=d(x1, y1, x4, y4)
* t_;
w[(i -1)
*4+2
][(i -1)
*4+3
]= w[
(i -1)
*4+3
][(i -1)
*4+2
]=d(x2, y2, x3, y3)
* t_;
w[(i -1)
*4+2
][(i -1)
*4+4
]= w[
(i -1)
*4+4
][(i -1)
*4+2
]=d(x2, y2, x4, y4)
* t_;
w[(i -1)
*4+3
][(i -1)
*4+4
]= w[
(i -1)
*4+4
][(i -1)
*4+3
]=d(x3, x3, x4, y4)
* t_;
cp.push_back()
;//從cp[1]開始
cp.push_back()
; cp.
push_back()
; cp.
push_back()
;}for(
int i =
1; i <=
4* s; i++)}
}double ans = inf;
for(
int i =
1; i <=
4; i++
)//a城市為起點,把四個點分別作為起點,最後比較最小值
printf
("%.2f"
, ans)
;return0;
}
Car的旅行路線
題目描述 description 又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t...
Car的旅行路線
題d car的旅行路線 時間限制 1 記憶體限制 128 mb 提交 1 解決 0 標籤標籤已被遮蔽 提交狀態 討論版 題目描述 又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一 條筆直的高速鐵路,第i個...
Car的旅行路線
又到暑假了,住在城市a的car想和朋友一起去城市b旅遊。她知道每個城市都有四個飛機場,分別位於乙個矩形的四個頂點上,同乙個城市中兩個機場之間有一條筆直的高速鐵路,第i個城市中高速鐵路了的單位里程 為ti,任意兩個不同城市的機場之間均有航線,所有航線單位里程的 均為t。那麼car應如何安排到城市b的路...