OJ 分支限界 最大封閉區域

2021-10-06 17:09:47 字數 1503 閱讀 1601

題目描述:

有乙個由數字 0、1 組成的方陣中,存在一任意形狀的封閉區域,封閉區域由數字1 包圍構成,每個節點只能走上下左右 4 個方向。現要求只把【最大封閉區域】內的空間填寫成2 。

示例:輸入:

輸出:

【oj-ac**】

#include

#include

using

namespace std;

int n;

int a[32]

[32];

int dir[4]

[2]=

,,,}

;//下右上左

int cnt =0;

//記錄封閉區域的大小

int maxn =0;

//最大封閉區域的大小

int id =2;

int max_id;

//記錄最大封閉區域的顏色標記

struct node

;int

bfs1

(int x,

int y)

//廣度優先查詢

} q.

pop();

//彈出

}return cnt;

//返回數量

}int

main()

}for

(int i =

1; i <= n; i++

)//輸出

system

("pause");

return0;

}

思路分析:1)首先確定乙個合理的限界函式,根據該函式確定目標函式的界:

dx >= 0 && dx <= n + 1 && dy >= 0 && dy <= n + 1 && a[dx][dy] == 0

2)按照廣度優先搜尋策略搜尋,在分支結點上依次擴充套件該結點的子結點,分別估算子結點的目標函式可能性,如果滿足條件則壓入佇列,當某一位置的所有可能都被搜尋,彈出該位置,重複以上過程。

3)先找出所有非封閉區域內的0元素,將其做上標記,在用for迴圈進行尋找,記錄剩餘每個區域內零的數量,通過標記的不同來區分是否屬於同乙個區域,用當前數量和最大值比較,若當前數量大,則記錄該區域的顏色標記。

分支限界 最大團問題

給定有乙個無向圖,找出最大團個數。最大團也就是該圖中最大的完全圖 各頂點之間都有邊 演算法思想 設p為所有點集的集合,依次取出p中的頂點作為團的起始點,也就是以該點為起點開始拓展,每次檢視相鄰頂點是否與團內各點聯通,若true,則加入該點。為了進一步降低時間複雜度,採取記憶化遞迴的方式,從後向前遍歷...

最大團問題 分支限界

問題描述 給定無向圖g v,e 其中 v是非空集合,稱為頂點集 e是 v中元素構成的無序二元組的集合,稱為邊集,無向圖中的邊均是頂點的無序對,無序對常用圓括號 表示。如果u v,且對任意兩個頂點u,v u有 u,v e,則稱u是 g的完全子圖。g的完全子圖u是 g的團當且僅當 u不包含在 g的更大的...

分支限界法

分支限界法 類似於回溯法,也是一種在問題的解空間樹t上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法 的求解目標是找出t中滿足約束條件的 所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種...