問題描述
在乙個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。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也是正整數。例如有兩...