題目來源:http://community.topcoder.com/stat?c=problem_statement&pm=12699
這道題目是第一次在比賽的時候做出來的,開始還想用brute force,後來發現那太複雜了,於是在紙上畫了畫,發現一個規律,那就是隻有在一個2x2的cell中,如果出現3個N或3個Z方式的cell,那麼這種情況下肯定是無法配色成功,因為最後一定會有兩個相鄰點為相同的顏色。如果沒有這樣的情況存在,那麼是一定可以配色成功的,根據這點程式碼就好寫了。
程式碼如下:
#include <string>
#include <vector> using namespace std; /************** Program Begin *********************/
class ThreeColorabilityEasy {
public:
string isColorable(vector <string> cells) {
for (int i = 0; i < cells.size() - 1; i++) {
for (int j = 0; j < cells[0].size() - 1; j++) {
int n = 0; n += cells[i][j] == 'N' ? 1 : 0;
n += cells[i][j+1] == 'N' ? 1 : 0;
n += cells[i+1][j] == 'N' ? 1 : 0;
n += cells[i+1][j+1] == 'N' ? 1 : 0;
if (n == 1 || n == 3) {
return "No";
}
}
} return "Yes";
} }; /************** Program End ************************/