矩陣
(matrix.cpp/c)
【問題描述】
有乙個n×n的矩陣。
初始時,(x,y)位置的顏色會作為a_給你,如果是「.」表示白色,如果是「#」表示黑色。
現在有一種染色操作,選擇兩個整數x,y∈[1,n],記(x,1),...,(x,n)的顏色為c_1,...,c_n,將(1,y),...,(n,y)的顏色賦為c_1,...,c_n。
你要求將矩陣染成全黑的最少步數。
無解輸出「-1」。
【輸入格式】
輸入檔名為matrix.in。
第一行乙個整數表示n。
接下來n行,每行n個字元表示整個矩陣。
【輸出格式】
輸出檔名為matrix.out。
輸出檔案只有一行,乙個整數表示答案。
【輸入輸出樣例】
matrix1.in
matrix1.out2#.
.#3matrix2.in
matrix2.out2..
..-1
【資料規模與約定】
對於30% 的資料,滿足n≤4。
對於另外20% 的資料,滿足每一列都至少有乙個黑色的格仔。
對於100% 的資料,滿足n≤1000。
所以我們就輕鬆的把目標——全盤染黑的狀態轉化到小目標——染黑一行
易證:只要棋盤中有乙個是黑的,就可以染黑一行。故唯一可能無解的情況是——沒有乙個是黑的
所以我們一行一行地搜尋,計算每一行的空缺。如果這個空缺所在的行 對應的列 有黑子,那麼操作一步就可以轉化過來。如果沒有的話,操作兩步也可以轉化過來(只要將有黑子的行調到這一列就可以了)。
將一行操作完成以後,我們看看哪一列需要進行操作,再將操作步數加上即可。
這裡還要落實兩個問題:
1.會不會出現在操作過程中莫名其妙就全盤染黑的情況?或者說,不按部就班投機取巧就能夠全盤染黑?
答:不會。操作一定是將行擺成列,只要開始時不是全黑的、並且沒有一行是全黑的,就不會出現列被全染黑的情況,因而不會全盤染黑。
2.操作兩步的過程要注意一點:將有黑子的行調到列這一步是具有永久性的,這一步操作之後這一列就有黑子了。
#include#include#include#includeusing namespace std;
char ss[1010][1010];
int n;
int cal[1010];
bool bbk[1010];
inline bool check()
return bk;
}inline int mymin(int x,int y){return x總結:
學會通過操作過程看到問題的本質,從而將總目標細化為小目標,同時在連線大小目標的時候要考慮清楚情況,系統分析,科學轉接。
測試階段流程
這次專案測試階段的流程我覺得還可以,記錄一下 1 開發完成之後,先出乙個版本,裝到測試伺服器上。這個伺服器上的版本是穩定的,不允許打補丁 2 測試人員每天測試,提交bug。開發人員同步修改,可以滯後一點 比如1 3天 但不能滯後太多 3 與測試伺服器保持穩定不同,開發人員每天晚些時候,比如說17 0...
測試階段流程
這次專案測試階段的流程我覺得還可以,記錄一下 1 開發完成之後,先出乙個版本,裝到測試伺服器上。這個伺服器上的版本是穩定的,不允許打補丁 2 測試人員每天測試,提交bug。開發人員同步修改,可以滯後一點 比如1 3天 但不能滯後太多 3 與測試伺服器保持穩定不同,開發人員每天晚些時候,比如說17 0...
階段測試專案
1.設計乙個資料表用於儲存圖書資訊,需要儲存圖書的書名,作者,出版社,封面 資訊。開發乙個帶介面的程式,使用者可以向資料表中新增紀錄,刪除記錄,也可以修改已有的圖書記錄,並可以根據書名,作者等條件查詢圖書 2.開發c s結構的圖書銷售管理系統,要求實現兩個模板 後台管理,包括管理種類,管理圖書庫存 ...