POJ 線段相交 最短路 The Doors

2022-05-22 10:24:10 字數 1759 閱讀 4526

題意:

乙個正方形中有n道豎直的牆,每道牆上開兩個門。求從左邊中點走到右邊中點的最短距離。

分析:以起點終點和每個門的兩個端點建圖,如果兩個點可以直接相連(即不會被牆擋住),則權值為兩點間的歐幾里得距離。

然後求起點到終點的最短路即可。

1 #include 2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;78

const

int maxn = 50;9

const

double inf =1e4;

10const

double eps = 1e-8;11

12struct

point

1316 }p[maxn * 4

];17

18typedef point vector;

1920

point read_point()

2126

27 point operator - (const point& a, const point&b)

28 29

30 vector operator / (const vector& a, double

p)31

3233

double dot(const vector& a, const vector&b)

34 35

36double length(const vector&a)

37 38

39struct

door

4043

};44

45 vectordoor;

4647

double d[maxn * 4], w[maxn * 4][maxn * 4

];48

bool vis[maxn * 4

];49

intcnt;

5051

bool isok(int a, int

b)52

62return

true;63

}6465void

init()

6672

73int

main()

7491 door.push_back(door(x, y[0], y[1], y[2], y[3

]));92}

93 p[cnt++] = point(10, 5

);94

95init();

9697

for(int i = 0; i < cnt; ++i)

98for(int j = i+1; j < cnt; ++j)

99105

//dijkstra

106 d[0] = 0

;107

for(int i = 1; i < cnt; ++i) d[i] =inf;

108for(int i = 0; i < cnt; ++i)

109116

117 printf("

%.2f\n

", d[cnt-1

]);118

}119

120return0;

121 }

**君

POJ 最短路徑

這兩天做了六道最短路徑的問題,分別用了dijkstra演算法 spfa演算法和floyd演算法,甚至還有一道題用並查集做的也a了,感覺對短路徑已經學得很不錯了。poj1860,poj3259,poj1062,poj2253,poj1125,poj2240 poj2253,dijkstra和並查集都可...

POJ 1039 Pipe 線段相交

題目 給乙個管子,有很多轉彎處,問從管口的射線射進去最長能射到多遠 題解 根據黑書,可以證明的是這條光線一定經過了乙個上頂點和下頂點 所以我們列舉每對上下頂點就可以了 include include include include define eps 1e 5 using namespace st...

POJ 3463 最短路 次短路

本題是求最短路和比最短路距離長1的次短路的個數,於是就用到了dijkstra 主要的改變就是陣列都開到了二維,第二維用來表示是最短路還是次短路 比如d陣列和vis陣列 而cnt陣列使用來訪問最短路和次短路的次數 那麼最外層的迴圈就要到2 n 1次了,其中n 1次是用來求最短路的,還有n次是次短路的 ...