【例】一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。如:
陣列4 10
0234500067
1034560500
2045600671
0000000089
有4個細胞。
0234500067 按照上下左右的順序進行檢查,並將符合條件的依次入隊
1034560500 解空間是一棵四叉樹
2045600671
0000000089
為避免乙個細胞被重複檢查,需要將檢測過的細胞數字清0
為避免乙個細胞被重複檢查,需要將檢測過的細胞數字清0
0234500067
1034560500
2045600671
0000000089
⑴從檔案中讀入m*n矩陣陣列,將其轉換為boolean矩陣存入bz陣列中;
⑵沿bz陣列矩陣從上到下,從左到右,找到遇到的第乙個細胞;
⑶將細胞的位置入隊h,並沿其上、下、左、右四個方向上的細胞位置入隊,入隊後的位置bz陣列置為false;
⑷將h隊的隊頭出隊,沿其上、下、左、右四個方向上的細胞位置入隊,入隊後的位置bz陣列置為false;
⑸重複4,直至h隊空為止,則此時找出了乙個細胞;
⑹重複2,直至矩陣找不到細胞;
⑺輸出找到的細胞數。
【參考程式】
#includeusing namespace std;
int dx[4]=, // x,y 方向上的增量
dy[4]=;
int bz[100][100],num=0,n,m; //二維陣列,儲存原始矩陣
void doit(int p,int q) //本方向搜尋到細胞就入隊
}}while (t
}int main()
for (i=0;i<=m-1;i++)
for (j=0;j<=n-1;j++)
if (bz[i][j]) doit(i,j); //在矩陣中尋找細胞
printf("number of cells=%d",num);
return 0;
}
分支限界演算法。
分支限界法類似於回溯演算法,是在問題的解空間樹上搜尋問題解的演算法,主要體現在兩點不同 1.求解目標不同。回溯演算法的求解目標是找出解空間樹中滿足約束條件的所有解,而分支限界法的求解目標是找出滿足約束條件的乙個解,或者是在滿足約束條件的解中找出某種意義下的最優解。搜尋解空間樹的方式不同。回溯演算法以...
演算法 分支限界法
在當前節點 擴充套件節點 處,先生成其所有的兒子節點 分支 然後再從當前的活節點 當前節點的子節點 表中選擇下乙個擴充套件節點。為了有效地選擇下乙個擴充套件節點,加速搜尋的程序,在每乙個活節點處,計算乙個函式值 限界 並根據函式值,從當前活節點表中選擇乙個最有利的節點作為擴充套件節點,使搜尋朝著解空...
分支限界演算法(2)
例題四單源最短路徑問題分支限界演算法的資料結構 include include include using namespace std class graphic class pathnode bool operator pathnode b const graphic graphic int n,...