棋盤染色(迭代加深搜尋)

2021-07-16 19:51:02 字數 1063 閱讀 4887

題目描述:

有乙個5×5的棋盤,上面有一些格仔被染成了黑色,其他的格仔都是白色,你的任務的對棋盤一些格仔進行染色,使得所有的黑色格仔能連成一塊,並且你染色的格仔數目要最少。讀入乙個初始棋盤的狀態,輸出最少需要對多少個格仔進行染色,才能使得所有的黑色格仔都連成一塊。(注:連線是指上下左右四個方向,如果兩個黑色格仔只共有乙個點,那麼不算連線)

輸入描述:

輸入包括乙個5×5的01矩陣,中間無空格,1表示格仔已經被染成黑色。

輸出描述:

輸出最少需要對多少個格仔進行染色

樣例輸入:

11100

11000

10000

01111

11111

樣例輸出:

1

#include

#include

using

namespace

std;

const

int maxn=6;

int sx[5]=,

sy[5]=;

int n,fx,fy,tot,total,map[maxn][maxn],f[maxn][maxn];

void power_can(int x,int y)

}int can(int x)

int power_dfs(int x,int y,int now,int sum)

for(int j=y+1;j<=5;j++)

if(!map[x][j])

for(int i=x+1;i<=5;i++)

for(int j=1;j<=5;j++)

if(!map[i][j])

return0;}

int main()}}

for(int i=0;i<=5*5;i++)

if(power_dfs(0,0,0,i))//橫座標,縱座標,以染了多少,一共染多少(迭代加深)

}

迭代加深搜尋

深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果dfs在一開始就選錯了分 支,那就會在沒有答案的深層次浪費時間 當搜尋樹規模隨著層次的深入增長很快,並且能 夠確保答案在乙個較淺的節點上時,就可以使...

迭代加深搜搜尋

對於可以用回溯法求解但解答樹的深度沒有明顯上限的題目,可以考慮使用迭代加深搜尋。經典問題 埃及分數問題 給出乙個分數,比如19 45,把它寫成若干個形如1 ri的分數的和的形式,比如19 45 1 5 1 6 1 18,要求分母不能重複使用並且使用的分數的個數最少。如果有多組個數相同的解,最後的分數...

IDDFS迭代加深搜尋

includeusing namespace std const int maxn 10 int n,a maxn bool ans sort return true int h bool dfs int d,int maxd return false int solve return max an...