樣例樣例輸入 樣例輸出
題解我們可以把電路板上的每個格點(橫線與豎線的交叉點)看作無向圖中的結點。3 5 1
\\/\\
\\///
/\\\\
若兩個結點x和y是某個小方格的兩個對角,則在x與y之間連邊。若該方格中的標準件(對角線)與x到y的線段重合,則邊權為0;若垂直相交,則邊權為1(說明需要旋轉1次才能連通)。然後,我們在這個無向圖中求出從左上角到右下角的最短距離,就得到了結果。
這是乙個邊權要麼是0,要麼是1的無向圖。在這樣的圖上,我們可以通過雙端佇列廣度搜尋計算。
分支邊權為1,從隊尾入
分支邊權為0,從隊首入
保證兩段性和單調性
因為每個節點只需要訪問一次,所以演算法的時間複雜度為o(r×c)
注釋:
1.make_pair的用法無需寫出型別, 就可以生成乙個pair物件
例:make_pair(42,『%』);
而不必費力寫成:
pair(42,『%』)
2. if((r+c)%2) 那麼無解
畫個圖理解一下就好了,畢竟你是要走對角線
**
#include#include#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int cap=500010
;int dist[510][510
];//兩點間的最短距離
char map[510][510
]; //讀圖
pair
q[cap*2
]; //佇列
intr,c,li,ri;
inline
bool valid(int x,int y) //
是否出界
inline
void que_add(int x,int y,int
v)
}int
main()
else
if(valid(cx-1,cy-1
))
if(valid(cx+1,cy-1
))
if(valid(cx+1,cy+1
))
}printf(
"%d\n
",dist[r][c]);}}
return0;
}
1465 例題1 剪花布條
1465 例題1 剪花布條 時間限制 1000 ms 記憶體限制 65536 kb 提交數 1124 通過數 727 題目描述 原題來自 hdu 2087 一塊花布條,裡面有些圖案,另有一塊直接可用的小飾條,裡面也有一些圖案。對於給定的花布條和小飾條,計算一下能從花布條中盡可能剪出幾塊小飾條來呢?輸...
1433 例題1 憤怒的牛
題解 this is an er fen ti.由題意可得 它是求最小值最大的問題 我們假設 每兩頭牛之間的最小距離為 d 也就是每兩頭牛之間的距離 d 問題也就是求這個 d 最大是多少 理一理思路 1.對所有的牛舍從小到大排序 2.假設我們把第 i 頭牛放在 ai 號牛舍裡,那麼第 i 1 頭牛就...
1440 例題1 數的劃分 dfs剪枝
1440 例題1 數的劃分 時間限制 1000 ms 記憶體限制 65536 kb 提交數 1607 通過數 1059 題目描述 將整數n分成k份,且每份不能為空,任意兩份不能相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。問有多少種不同的分法。輸出乙個整數,即不同的分法。輸入 ...