題意:
乙個正方形中有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次是次短路的 ...