标签:
刚开始学习c++,代码有什么问题还欢迎各位指出
//通过修改宏可以解决n皇后的问题 #define MAX 8 #define ABS(x) ((x>0)?(x):-(x)) class Queen { private: int queen[MAX] ; public: Queen(); int Place(int); int Attack(int, int); int OutData(); ~Queen(); }; Queen::Queen() { //for (int i = 0; i < MAX; i++)queen[i] = 0; std::cout << "hello,welcome to eight Queen "; Place(0); } //排列下一个皇后 int Queen::Place(int p) { for (int i = 0; i < 8;i++) { if (!Attack(p, i)) { queen[p] = i; if (p == MAX - 1) OutData(); else { Place(p + 1); } } } return 0; } //判断是否收到攻击,受到攻击返回1,否则返回0 int Queen::Attack(int row, int col) { int flag = 0; //i<row可以保证不在同一行 for (int i = 0; i < row && !flag; i++) { int inc_row = ABS(i - row); int inc_col = ABS(queen[i] - col); //判断是否在同一列,是否在斜线上 flag = (col == queen[i]) || (inc_col == inc_row); } return flag; } int Queen::OutData() { for (int i = 0; i < MAX; i++) { for (int j = 0; j < MAX; j++) { if (j == queen[i])std::cout << "Q"; else std::cout << "-"; } std::cout << "\n"; } getchar(); return 0; } Queen::~Queen() { std::cout << "end" << std::endl; } int main() { Queen a; return 0; }
调试的时候会有一个问题,一直输出结果,经过仔细查看代码看出,由于递归调用,可以输出所有种类的结果,所以得对结果加以区分,加入getchar是为了输出一个结果
标签:
原文地址:http://www.cnblogs.com/little77/p/5309027.html