P2440數字消除遊戲

2021-08-08 23:54:50 字數 1279 閱讀 1537

問題描述

在乙個n*n的方形棋盤上玩消除遊戲,棋盤上布滿了數字。

每一步,玩家可以任選乙個數字x,用它填充座標為(1,1)格仔所在連通區域,該區域的數字都會變成x。(如果兩個數字相同且相鄰,我們稱這兩個數字連通。相鄰是上下左右四方向)。

當整個棋盤的數字都相同時,就可以將整個棋盤上的數字消除掉,遊戲結束。

問,最少需要幾次操作就能消除所有數字。

輸入格式

有若干組測試資料(不超過20組),對於每組測試資料:

第一行,乙個整數n,表示棋盤的尺寸。

接下來乙個n*n的數字矩陣,表示遊戲的初始局面。

當輸入的n==0時,輸入結束。

輸出格式

對於每組測試資料,輸出一行,乙個整數,表示最少需要的運算元。

樣例輸入

2 1 3

3 3

4 5 5 2 0

5 5 2 0

2 2 2 0

0 0 0 2

0樣例輸出1 3

搜尋剪枝1:迭代加深搜素

剪枝2:如果當前步數加上剩下總數大於總步數則return

剪枝3:構建乙個b陣列記錄聯通塊以及其周圍的數字

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,m;

int ma[9][9];

int a[9][9],b[9][9];

int dx[4]=,dy[4]=;

bool uni[1001];

int col[9];

int knum;

void tu(int x,int y,int z) }

bool cf[1000];

int ida()

} }

return cnt;

} int check(int c)

} }

return temp;

} bool dfs(int x)

} return

0; }

int main()

for(i=0;i<=1000;i++)}

tu(1,1,ma[1][1]);

for(m=0;;m++)

cout

} }

P2440 木材加工

要保護環境 木材廠有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭 木頭有可能有剩餘 需要得到的小段的數目是給定的。當然,我們希望得到的小段木頭越長越好,你的任務是計算能夠得到的小段木頭的最大長度。木頭長度的單位是cm。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也是正整數。例如有...

P2440 木材加工

木材廠有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭 木頭有可能有剩餘 需要得到的小段的數目是給定的。當然,我們希望得到的小段木頭越長越好,你的任務是計算能夠得到的小段木頭的最大長度。木頭長度的單位是cm。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也是正整數。例如有兩根原木長度...

洛谷 P2440 木材加工

題目描述 木材廠有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭 木頭有可能有剩餘 需要得到的小段的數目是給定的。當然,我們希望得到的小段木頭越長越好,你的任務是計算能夠得到的小段木頭的最大長度。木頭長度的單位是cm。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也是正整數。例如有兩...