JZOJ 3422 水叮噹的舞步

2021-07-12 06:02:52 字數 1033 閱讀 5792

水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。

為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌~~~

地毯上的格仔有n行n列,每個格仔用乙個0~5之間的數字代表它的顏色。

水叮噹可以隨意選擇乙個0~5之間的顏色,然後輕輕地跳動一步,地毯左上角的格仔所在的聯通塊裡的所有格仔就會變成她選擇的那種顏色。這裡連通定義為:兩個格仔有公共邊,並且顏色相同。

由於水叮噹是施展輕功來跳舞的,為了不消耗過多的真氣,她想知道最少要多少步才能把所有格仔的顏色變成一樣的。

對於100%的資料,n<=8,每個測試點不多於20組資料。

對於這種題,棟爺已經吐槽過了,好吧我這種蒟蒻就只好拿來開闊思維練手暴力和實現能力了。

看到資料範圍就知道這就是搜尋,至於怎麼去搜呢,這是個奧妙重重的學問。

此題迭代深搜的效果奇佳,可能是因為迭代深搜有乙個神奇的剪枝:

若當前層數+剩下不同顏色點的個數》限制搜尋深度就可以直接返回。

當然,還有乙個剪枝就是暴力擴充套件的時候若擴充套件出來的新點<=原點個數,顯然此次擴充套件無意義。

至於怎麼擴充套件,我是用的hzj同學的暴力法,用乙個類似佇列的東西存點,每次所有佇列的點都上下左右試一下(聽起來好暴力啊)。

#include

#include

#include

#define fo(i,a,b) for(int i=a;i<=b;i++)

using namespace std;

const int n=9,fx[4][2]=,,,};

int n,st,dep,top,a[n][n];

bool bz[n][n],p[6];

struct node

q[n*n];

void bfs(int co)

}bool dfs(int d)

top=tp;

}return0;}

int main()}}

return

0;}

水叮噹的舞步 深搜

背景background 水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌 描述description 地毯上的格仔有n行n列,每個格仔用乙個0 5之間的數字代表它的顏色。水叮噹可以隨意選...

水叮噹的舞步(迭代搜尋 A 搜尋)

題目描述 水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌 地毯上的格仔有n行n列,每個格仔用乙個0 5之間的數字代表它的顏色。水叮噹可以隨意選擇乙個0 5之間的顏色,然後輕輕地跳動一步,...

BZOJ T3041 水叮噹的舞步

bzoj 3041 水叮噹的舞步 這是道ida 迭代加深 估價剪枝 首先考慮估價函式,一般情況下我們把易於計算的操作次數的下限作為a 的估價函式,易知這道題裡每次有效操作只會向外拓寬乙個顏色層,那麼估價函式就可以確定為剩下未被拓展的顏色層數。這個層數就是答案,這個數的下限就是剩餘未探索的顏色數,道理...