十字繡 題解

2022-06-26 08:24:07 字數 772 閱讀 5003

首先能夠一針解決的,肯定是在乙個針線兩端相連的連通塊裡,把所有連通塊裡的針數相加即可。

求連通塊用dfs或者並查集即可。由於是二維座標,還是轉換成一維的點的編號比較方便。

下面我們就可以把原圖轉換成乙個無向圖,求連通塊數。

每個連通塊裡的真數怎麼求?

針的穿入穿出是在結點的位置,對於某乙個結點:

如果既有一條正面的線,也有一條反面的線,對於該結點我們可以把它當做一針;

如果有兩條正面的線,一條反面的線,那麼對於該結點至少需要兩針才能搞定;

我們擴充套件到乙個連通塊,每個結點都會有對應的最少針數,即為正面反面線數量的差絕對值。

我們可以累加起來,但是由於每一條線對應兩個端點,因此一條線會對兩個端點的針數做貢獻,所以我們最後將總和除以2。

特別的,如果總和為0,我們可以認為是出現了乙個環形的結構,即一針搞定,所以針數是加1.

// 最後求解的**

for (int i = 1; i <= n+1; ++i)

}}

// 加邊函式,形參w用來表示正面還是反面的線,分別用1和-1表示

void addedge(int from, int to, int w) else

}

// 建圖的過程

for (int i = 1; i <= n; ++i) else if (str[j] == '\\') else if (str[j] == 'x')

}}

我繡的十字繡

乙個月前,家旁邊開了乙個十字繡店,裡面的繡品琳琅滿目很好看,很多女生都在裡面繡,我起了好奇心,也買了個回來。下面是我繡的,花了大概半個月時間,每天繡一點點,寫程式寫累了,就拿這個休息一下,不錯吧。這個是乙個手機或者鑰匙掛件,黃色的小飛鼠。正面 img 背面 img 簡介一下十字繡 十字繡起源於歐洲,...

寬搜 並查集 Vijos P1015 十字繡

題目大意 n m的網格,線只能在網格的頂點處才能從布的一面穿到另一面。每一段線都覆蓋乙個單位網格的兩條對角線之一,而在繡的過程中,一針中連續的兩段線必須分處布的兩面。給出布兩面的圖案,問最少需要幾針才能繡出來?一針是指標不離開布的一次繡花過程。題目思路 寬搜 或 並查集 正面的如果有線就把端點連正邊...

讀書十字絕

如何學會讀書,古今中外名家讀書有 十說 一本 說歷史學家鄭天挺指出,在同一時間內精讀一本最好的書。乙個字 乙個詞 乙個人 一處地 一件事,都要弄清原委。從頭到尾,反覆對照。二分 說現代學者梁啟超把所讀的書分為二類 精讀與瀏覽 精讀的再分二類 有價值的文學作品與有益身心的名人格言。三遍 說中國作家茅盾...