時間限制: 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 #include5a tired day = =#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()
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個物品 ...