首页 > 代码库 > [CC150] 八皇后问题
[CC150] 八皇后问题
Write an algorithm to print all ways of arranging eight queens on an 8*8 chess board so that none of them share the same row, column or diagonal.
思路:
本质上是DFS, 从第一行开始一行行地放棋子,每次放棋子之前根据当前的棋盘检查一下约束。
Code (from book):
void placeQueen(int row, Integer[] columns, ArrayList<Integer[]> result){ if(row == GRID_SIZE){ result.add(columns.clone()); return; } for(int col = 0; col < GRID_SIZE; ++col){ if(checkValid(row, col, columns)){ columns[row] = col; placeQueen(row + 1, columns, result); } } } // No need to check the same row because the program // proceeds one row at a time boolean checkValid(int row, int column, Integer[] columns){ for(int i = 0; i < row; ++i){ int j = columns[i]; // check the same column if(column == j){ return false; } // check same diagonal if(Math.abs(row - i) == Math.abs(column - j)){ return false; } } return true; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。