Luogu P1354 房間最短路問題

2022-05-16 11:31:25 字數 1051 閱讀 5957

這是一道紫題,然而實際上我覺得也就藍題難度甚至不到。

and,這道題就是一道數學題,**模擬計算過程。

求最短路嘛,肯定要考慮建圖,只需要把中間的牆上每個口的邊緣處的點作為圖中的點就行。至於為什麼,顯然如果我們取中間任何乙個點連邊,到下一面牆時路徑之和總是比連其中乙個邊緣的點要大,直觀感(gán覺(juě)一下就行。連邊我們一定會遇到乙個問題,就是會被牆擋住。解決辦法就是一次函式。我們求出要連這條邊的直線解析式(直接模擬計算過程就行),然後求出在中間的牆上的函式值,如果這個函式值正好在缺口處就可以,否則被牆擋住,中間有多面牆列舉就行。

當我們建完圖後這題就是最短路板子題了。n<=20,直接floyd就水過去了。

據說lbg直接用dfs暴力水過去了,tql!

#include#include

#include

#include

#include

#define n 100

using

namespace

std;

ints;

double

dis[n][n];

struct

wall

w[30

];bool check(int a,int b,int na,int

nb)

return1;

}void add(int a,int b,int na,int

nb)void

reset()

}}void

floyd()}}

return;}

intmain()

w[0].x = 0;w[++s].x = 10

;

for(int i = 1;i <= 4;i++) w[0].y[i] = w[s].y[i] = 5

;

for(int a = 0;a < s;a++)}}

}floyd();

printf(

"%.2lf

",dis[1][4 * s + 1

]);

}

luogu P1354 房間最短路問題

火焰之地傳送門 憑心而論這題挺水的,一道計算幾何加工的最短路。用前面牆的個數 4 當前牆上的序號表示點的序號,對於每個點 包括起點和終點 列舉其後面牆上的所有點一一判斷是否可與之相連,能相連就連邊,最後跑一遍floyd。判斷直接用數學公式做一次函式就行。呆馬 include include incl...

P1354 房間最短路問題

看到此題,第乙個想到的是貪心 要從 0.0,5.0 走到 10.0,5.0 就要繞過一些牆,那就會經過一些牆的端點 下文稱之為節點 單從樣例看來,就會說走到離當前節點距離最小的點就行了,但真的是這樣嗎?顯然不是,原因有二 如果起點到終點沒有障礙,那麼走其它節點是不是就會走了冗餘的路?是的,在某些最優...

洛谷P1354 房間最短路問題 floyd

在乙個長寬均為10,入口出口分別為 0,5 10,5 的房間裡,有幾堵牆,每堵牆上有兩個缺口,求入口到出口的最短路經。輸入格式 第一排為n n 20 牆的數目。接下來n排,每排5個實數x,a1,b1,a2,b2。x表示牆的橫座標 所有牆都是豎直的 a1 b1和a2 b2之間為空缺。a1 b1 a2 ...