poj1753解題報告(列舉 組合數)

2021-07-02 03:28:47 字數 1333 閱讀 2526

poj 1753,題目鏈結

有4*4

的正方形,每個格仔要麼是黑色,要麼是白色,當把乙個格仔的顏色改變(黑

->

白或者白

->黑)

時,其周圍上下左右

(如果存在的話

)的格仔的顏色也被反轉,問至少反轉幾個格仔可以使

4*4的正方形變為純白或者純黑?

1. 每乙個位置只有兩種顏色,翻偶數次等於沒有翻,所以只有翻基數次對棋盤有影響,即只用考慮乙個位置最多翻一次。

2. 一共有

16個位置,所以最多翻

16次。那麼可能翻

0次就成功、或者翻

1次成功、或者翻

2次成功

...或者翻

16次成功。

3. 每個位置翻轉的順序對結果無影響。

那麼這就變成了乙個組合數問題:

將輸入的16

個元素放到乙個陣列中,進行組合數計算即可。(組合數

+列舉)

/*

* memory: 384k

* time: 16ms

*/#include #include #define allnum 16

static int count = 0;

/** 15 14 13 12

* 11 10 9 8

* 7 6 5 4

* 3 2 1 0

*/void flip(int& data, int posidx)

bool isok(int data)

/** num 1 -- allnum

* staridx 0 -- allnum-1

*/void func(int num, int staridx, int data, int step)

}// black 0, white 1

int main()

void flip(int& data, int posidx)

// black 0, white 1

int main()

int step = allnum;

bool bimpossible = true;

for (int i=0; i<=0xffff; ++i)

}if (isok(tempdata) && tempstep < step) step = tempstep;

} if (step == allnum)

printf("impossible\n");

else

printf("%d\n", step);

return 0;

}

poj1753解題報告

1.演算法 核心是寬度優先搜尋和位處理。要找出最快的步數,用寬搜。1 寬度優先搜尋資料結構 佇列的單元unit包含x 用int的末16位記錄16個位置的資訊 rounds 記錄第幾輪達到當前的狀態 i 記錄該狀態是通過翻動哪個棋子得來的,以避免返回先前的狀態 queue是乙個佇列,記錄所有狀態 p,...

poj1753 搜尋,列舉法

1 2014.3.1 2 poj175334 5 題意 6 給你乙個4 4的黑白棋盤,通過翻棋子使棋盤變為全白或全黑,7 以下 翻乙個位置 皆指翻著個位置和它周圍的四個棋子。8 翻子時四周的四個棋子如果存在的話顏色也會跟著改變。9 問最少需要多少步可以使棋盤變為一種顏色。10 11 思路 12 每一...

列舉演算法思路訓練 poj1753

從知乎找到乙份訓練大綱,先按照這個練習吧 poj1753 大意是4 4的棋盤上,不斷黑白面的翻 己和上下左右 如果有棋子的話 如果有可能翻到只有一種顏色,那麼算出來最少翻幾個棋子就可以做到只有一種顏色 列舉的思想是不斷地猜測,從可能的集合中一一嘗試,然後再判斷題目的條件是否成立。oiwiki是這麼說...