NOIP2013模擬 水叮噹的舞步

2021-09-25 18:47:11 字數 2445 閱讀 1760

description

水叮噹得到了一塊五顏六色的格仔形地毯作為生日禮物,更加特別的是,地毯上格仔的顏色還能隨著踩踏而改變。為了討好她的偶像虹貓,水叮噹決定在地毯上跳一支輕盈的舞來賣萌~~~地毯上的格仔有n

nn行n

nn列,每個格仔用乙個[0,

5]

[0,5]

[0,5

]的數字代表它的顏色。

水叮噹可以隨意選擇乙個[0,

5]

[0,5]

[0,5

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

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

input

每個測試點包含多組資料。

每組資料的第一行是乙個整數n

nn,表示地攤上的格仔有n

nn行n

nn列。

接下來乙個n×n

n\times n

n×n的矩陣,矩陣中的每個數都在[0,

5]

[0,5]

[0,5

]之間,描述了每個格仔的顏色。

n =0

n=0n=

0代表輸入的結束。

output

對於每組資料,輸出乙個整數,表示最少步數。

sample input

2

0 0

0 0

3

0 1 2

1 1 2

2 2 1

0

sample output

0

3

data constraint

對於30

%30\%

30%的資料,n≤5

n\leq5

n≤5;

對於50

%50\%

50%的資料,n≤6

n\leq6

n≤6;

對於70

%70\%

70%的資料,n≤7

n\leq7

n≤7;

對於100

%100\%

100%

的資料,n≤8

n\leq8

n≤8,每個測試點不多於20

2020

組資料。

迭代加深即可,啟發函式就是當前地圖上有多少種顏色,於是可以得50分。

加乙個剪枝:當前選的顏色必須是左上角所在聯通塊的相鄰的格仔的顏色之一(否則拓展後沒有變化)。

#include

#include

#include

using

namespace std;

#define maxn 8

int n;

int col[maxn+5]

[maxn+5]

;bool vis1[maxn+5]

[maxn+5]

;void

dfs(

int i,

int j,

int c,

int k)

//恰似掃雷

bool vis[10]

;int

count()

int maxd;

bool

try(

int d)};

memcpy

(tmp,col,

sizeof tmp)

;memset

(vis1,0,

sizeof vis1)

;dfs(1

,1,1

,col[1]

[1])

;memcpy

(col,tmp,

sizeof tmp)

;int c[10]

=;for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=n;j++)if

(vis1[i]

[j])

//找到左上角所在聯通塊相鄰的顏色

for(

int c=

0;c<=

5;c++)if

(c[c]

)return0;

}int

main()

}

NOIP2013模擬 水叮噹的舞步

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

NOIP2013模擬 水叮噹的舞步

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

模擬 NOIP 2013 花匠

花匠棟棟種了一排花,每株花都有自己的高度。花兒越長越大,也越來越擠。棟棟決定把這排中的一部分花移走,將剩下的留在原地,使得剩下的花能有空間長大,同時,棟棟希望剩下的花排列得比較別緻。具體而言,棟棟的花的高度可以看成一列整數h 1,h 2,h n。設當一部分花被移走後,剩下的花的高度依次為g 1,g ...