題目:現有6*6大小的棋盤和18張多公尺諾骨牌,每張牌能覆蓋2個棋格,求將多公尺諾骨牌完全覆蓋棋盤的所有組合?
#include #include #include #include #include #include using namespace std;
const int max_length = 2 * 3;
setresult;
//***************==
// 棋盤位置類
//***************==
class position
position(const position& position) : x(position.getx()), y(position.gety())
position(int x, int y) : x(x), y(y)
if (y < 0 || y >= max_length)
}int getx() const
int gety() const
position getright()
position getbottom()
bool valid() const
bool operator==(const position& right) const
};//***************==
// 棋子類
//***************==
class chessman
chessman(const pair& positions) : positions(positions)
pairgetpositions() const
bool valid() const
if (positions.first == positions.second)
return true;
}bool isxdirection() const
return positions.first.getx() == positions.second.getx();
}};//***************==
// 棋盤類
//***************==
class chessboard}}
bool hold(const chessman& chessman)
position second = positions.second;
if (!second.valid() || board[second.getx()][second.gety()])
board[first.getx()][first.gety()] = chessmen.size() + 1;
board[second.getx()][second.gety()] = chessmen.size() + 1;
chessmen.push(chessman);
if (isfinished())
return true;
}bool unhold(chessman& pop)
bool ishold(const position& position) const
}return false;
}bool isfinished() const
string getsolutionstring()
rtn.width(4);
rtn<}
}return rtn.str();
} };int main(int argc, char** argv)
chessman chessmanr(make_pair(currgrid, currgrid.getright()));
chessman chessmanb(make_pair(currgrid, currgrid.getbottom()));
if (board.hold(chessmanr) || board.hold(chessmanb))
}while (true)
}if (i == 0 && j == 0)}}
}cout<<"ok, done."
}
小段問我的多公尺諾問題
今天小段在qq上問我乙個問題,應該是用什麼簡單的方法算的,我想不出來,就寫了個程式,在這裡貼出來,看了這篇文章的朋友有口算的方法告訴我,謝謝!giorgia 2006 10 18 14 49 03 100張多公尺諾骨牌 排成一列,依順序編號為123。99,100。第一次拿走所有奇數字置上的骨牌,第二...
多公尺諾骨牌問題,狀態壓縮dp
題目描述 用1 2 的矩形通過組合拼成大矩形,求拼成指定的大矩形有幾種拼法。首先 我們先求用1 2 的矩形拼成 n m的矩形有多少種拼法 當n m為奇數時,一定是不會拼出來的,因為想要拼出來就需要整數倍的小矩形數目。為了加速演算法,要把m,n中小的那個當做列 分兩個步驟 1 先求出相鄰兩行的轉化關係...
題解 與多公尺諾有關的插頭DP
hdu5731 題意 給你乙個nm的棋盤,我們用12或2 1 即橫著放或豎著放 的骨牌去填充這個棋盤。問你有多少種填法,使得這個棋盤 任意相鄰兩行或兩列之間都必須要有乙個骨牌橫跨。也就是使得這個棋盤為穩定的。題解from phile的空間 先求出不考慮分割線的n m棋盤的覆蓋方案數記為f n m 然...