題意:給你一個H*W的字符矩陣,一次操做能夠任意將兩行或者兩列交換。問你是否能經過任意屢次操做,使得其變爲對稱矩陣。對稱的含義是:對於任何格子A(i,j),其都等於A(H-i+1,W-j+1)。字符
顯然,先換行仍是列不影響結果,不妨假設先換行再換列。枚舉
行沒必要真換,只需找出哪些行成對便可,而後這些對的順序無關,這樣的方案數只有1*3*5*7*...*n,只有10000左右。
這個怎麼枚舉呢,假設行數是1,2,3,4,5,6,
那麼就(1,2)-(3,4)-(5,6)
-(3,5)-(4,6)
-(3,6)-(4,5)
(1,3)-(2,4)-(5,6)
-(2,5)-(4,6)
-(2,6)-(4,5)
(1,4)-(2,3)-(5,6)
-(2,5)-(3,6)
-(2,6)-(3,5)
(1,5)-(2,3)-(4,6)
-(2,4)-(3,6)
-(2,6)-(3,4)
(1,6)-(2,3)-(4,5)
-(2,4)-(3,5)
-(2,5)-(3,4)
就每次枚舉一對後,下一對(x,y)的x必定選上次空出來的第一個位子,y去枚舉其餘位子便可。
行數若是是奇數 相似,最後會剩下一個。
這樣枚舉完行,再去check列,假設列數爲偶數,則每次對於一列,找是否有與其的逆序相等的列,若是有 則配對成功。最後看看是否都能配對成功。
若是列數是奇數,還必須有一列單獨的迴文列放在(W+1)/2列的位子。