51. N-Queens && 52. N-Queens II
来源:互联网 发布:自组织网络算法 编辑:程序博客网 时间:2024/05/17 01:51
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
N皇后问题,不能有两个皇后在同一行、列、斜线。两个题一个要求返回结果,一个要求返回解的个数。
DFS。
List<List<String>> r = new ArrayList<List<String>>(); public List<List<String>> solveNQueens(int n) { char[][] q = new char[n][n]; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ q[i][j] = '.'; } } boolean[] col = new boolean[n]; //标记该列有没有被皇后占领 boolean[] d1 = new boolean[2*n]; //标记该斜线有没有被皇后占领 boolean[] d2 = new boolean[2*n]; nQueens(n,q,0,col,d1,d2); return r; } private void nQueens(int n, char[][] q,int row,boolean[] col,boolean[] d1,boolean[] d2){ if (row == n) { //success List<String> tmp = new ArrayList<String>(); for(char[] c:q){ tmp.add(new String(c)); } r.add(tmp); return; } for (int j = 0; j < n; j++) { int td1 = row+j , td2 = j - row+n; if(col[j] || d1[td1] || d2[td2]) continue; col[j] = true; d1[td1] = true; d2[td2] = true; q[row][j] = 'Q'; nQueens(n, q, row+1,col,d1,d2); col[j] = false; d1[td1] = false; d2[td2] = false; q[row][j] = '.'; } }
int num; public int totalNQueens(int n) { boolean[] col = new boolean[n]; //标记该列有没有被皇后占领 boolean[] d1 = new boolean[2*n]; //标记该斜线有没有被皇后占领 boolean[] d2 = new boolean[2*n]; nQueens(n,0,col,d1,d2); return num; } private void nQueens(int n,int row,boolean[] col,boolean[] d1,boolean[] d2){ if (row == n) { //success num++; //计数 return; } for (int j = 0; j < n; j++) { int td1 = row+j , td2 = j - row+n; if(col[j] || d1[td1] || d2[td2]) continue; col[j] = true; d1[td1] = true; d2[td2] = true; nQueens(n, row+1,col,d1,d2); col[j] = false; d1[td1] = false; d2[td2] = false; } }
0 0
- 51. N-Queens && 52. N-Queens II
- 51. N-Queens/52. N-Queens II
- 52.N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- 52. N-Queens II
- poj--2631--Roads in the North(树的直径 裸模板)
- python的LEGB原则
- iOS之arc与mrc的混合使用
- wireshark分析H264媒体包
- Opencv3.1+python2.7的CentOS7安装
- 51. N-Queens && 52. N-Queens II
- UPYUN的云CDN技术架构演进之路
- ArcGIS中QueryTask,FindTask,IndentifyTask 之间的区别
- 介绍几个网站(关于iOS)
- leercode Word Search
- IOS DEMO大全
- 调用远程服务
- Docker入门实战-SSH连接docker容器
- 前台图片样式的相关处理