水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。
為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌~~~
地毯上的格仔有n行n列,每個格仔用乙個0~5之間的數字代表它的顏色。
水叮噹可以隨意選擇乙個0~5之間的顏色,然後輕輕地跳動一步,地毯左上角的格仔所在的聯通塊裡的所有格仔就會變成她選擇的那種顏色。這裡連通定義為:兩個格仔有公共邊,並且顏色相同。
由於水叮噹是施展輕功來跳舞的,為了不消耗過多的真氣,她想知道最少要多少步才能把所有格仔的顏色變成一樣的。
我們迭代加深,列舉答案限制,
bfs列舉每次選擇哪種顏色,當列舉次數超過限制,就退出。否則如果bfs出答案就輸出。
這樣只能拿10分,
加上ida,估價函式為圖中大顏色數減一,
當列舉的深度加上估價函式大於限制就退出,
接著發現在列舉左上角所在的聯通快時很浪費時間,
我們用乙個乙個nn的v標記陣列。左上角的格仔所在的聯通塊裡的格仔為1,左上角聯通塊周圍一格的格仔為2,其它格仔都為為0。如果某次選擇了顏色c,我們只需要找出標記為2並且顏色為c的格仔,向四周擴充套件,再修改v標記,就可以不斷修改標記,但所有格仔都為1,就是答案了。
#include #include #include #include const int maxlongint=2147483647;
using namespace std;
int n,m,ans;
int z1[4][2]=,,,},f,a[9][9],t;
int mark[9][9];
bool colour[6];
int makeh()
} return h1;
}void put(int x,int y,int z)
}bool q(int color)
} return !p;
}void dg(int g)
if(g+h>f) return;
int copy1[9][9];
memcpy(copy1,mark,sizeof(copy1));
for(int color=0;color<=5;color++) }
int main()
memset(mark,0,sizeof(mark));
put(1,1,a[1][1]);
for(f=0;;f++)
printf("%d\n",f);
}}
NOIP2013模擬 水叮噹的舞步
水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌 地毯上的格仔有n行n列,每個格仔用乙個0 5之間的數字代表它的顏色。水叮噹可以隨意選擇乙個0 5之間的顏色,然後輕輕地跳動一步,地毯左上角...
NOIP2013模擬 水叮噹的舞步
description 水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌 地毯上的格仔有n nn行n nn列,每個格仔用乙個 0,5 0,5 0,5 的數字代表它的顏色。水叮噹可以隨意選擇...
模擬 NOIP 2013 花匠
花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...