1815 畫家問題

2021-08-15 22:24:43 字數 1225 閱讀 7770

有乙個正方形的牆,由n*n個正方形的磚組成,其中一些磚是白色的,另外一些磚是黃色的。bob是個畫家,想把全部的磚都塗成黃色。但他的畫筆不好使。當他用畫筆塗畫第(i, j)個位置的磚時, 位置(i-1, j)、 (i+1, j)、 (i, j-1)、 (i, j+1)上的磚都會改變顏色。請你幫助bob計算出最少需要塗畫多少塊磚,才能使所有磚的顏色都變成黃色。

解題思路同熄燈問題,列舉第一行的顏色狀態,然後再根據第一行的狀態,確定後面的操作。n<=15,總共有2的15次方=32768種情況,正常範圍內,沒有問題。不過本題求的是最少操作次數,需要另外處理一下。

#include

using

namespace std;

int a[

20][

20],b[2][

20],c[

20][

20];

int n,tot,minn,sign;

int d[5][

5]=,,

,,};

bool

check

()voidop(

int x,

int y)

}void

solve

()for

(int i=

2;i<=n;i++)

for(

int j=

1;j<=n;j++)

if(a[i-1

][j]==0)

if(check

())else

}int

main

()for

(int i=

1;i<=n;i++)

for(

int j=

1;j<=n;j++)

c[i][j]=a[i][j];

minn=

300,sign=

0,tot=0;

for(

int i=

0;iint)

pow(

2,n);i++)}if

(sign)

printf

("%d"

,minn);

else

printf

("inf"

);return0;

}

POJ 1681(畫家問題)

poj 1681,畫家問題,同熄燈問題 poj 2811 通過二進位制列舉第一行的情況後逐行操作,判斷最後一行是否全塗色 include include include using namespace std bool floors 20 20 copyf 20 20 intmain if leng...

noi1816 畫家問題(技巧搜尋Dfs)

problem 畫家問題 假設乙個ans陣列存的是對每乙個點的操作 0表示不圖 1表示圖 那麼 對於原圖 g 操作第三行時對第一行沒有影響 同樣往下類似的 所以 假設我們知道了ans的第一行就是最後答案的第一行 那麼對於ans的第二行 就必須是的第一行全變成黃色 以此類推 最後檢驗第n行 是不是全部...

列舉問題 POJ畫家問題

列舉 poj畫家問題 poj 畫家問題 測試 input 3yyy yyyyyy output 0input 5wwwww wwwww wwwww wwwww wwwww output 15 include include using namespace std int min painting b...