Codevs 1014 棋盤染色

2022-02-27 11:43:25 字數 1954 閱讀 4264

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

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

輸入描述 input description

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

輸出描述 output description

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

樣例輸入 sample input

樣例輸出 sample output

分析 analysis

思維級模版題= =。

判重:hash蛤習

判斷輸出:dfs求聯通塊

主體:bfs

注意點:狀態表示

主要還是資料範圍小= =感謝出題人放我蒟蒻一馬orz

** code

1 #include2 #include3 #include4 #include5

#define ll long long

6using

namespace

std;78

const

int dir[4][2] = ,,,};910

bool swi = true;11

12struct

map19

};20

21 queueq;

2223

bool hash[21473650

];24

25ll gethash(map now)31}

3233

return code%21473648;34

}3536bool poicheck(int x,int

y)40

41int tot = 0;42

bool chess[6][6

];43

void dfs(int x,int

y,map now)52}

5354

bool

check(map now)62}

63}6465 memset(chess,false,sizeof

(chess));

66 tot = 0;67

dfs(x,y,now);

6869

if(tot == 25-now.remain) return

true;70

else

return

false;71

}7273void

input() 81}

8283 tmp.step = 0;84

8586

87q.push(tmp);88}

8990

void

push(map now)else hash[code] = 1

;103

104if

(check(now))

109q.push(now);

110 now.map[i][j] = 0

;111

}112

}113

}114

}115

116void

bfs()

126127

push(tmp);

128}

129}

130131

intmain()

a tired day = =

Codevs 1014 裝箱問題

有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入描述 input description 乙個整數v,表示箱子容量 乙個整數n,表示有 n個物品 接下來n個整數,分別表示這 n ...

codevs 1014 裝箱問題

1014 裝箱問題 2001年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 題目描述 description 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱...

Codevs 1014 裝箱問題

題目描述 description 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入描述 input description 乙個整數v,表示箱子容量 乙個整數n,表示有n個物品 ...