1_算法_八皇后问题
来源:互联网 发布:微店网络似乎存在问题 编辑:程序博客网 时间:2024/06/05 04:57
今天上算法课,要求写数组的全排列,要用递归和回溯法来写,结果发现都很尴尬,听得懂算法写不出来,
然后上百度查数组的全排列,分别查了递归跟全排列,发现有些文章,好像分不清递归和回溯法,回溯法以前写过的到现在又忘了,
所以打算动手写一写,写了一个晚上发现,数组和八皇后这两个问题,递归和回溯法有点难分离,都有各自的有点.
然后特别是八皇后问题,我打算先看别人的递归法,看了几遍自己动手dubug一段时间就可以了,然后去看别人的回溯法,
发现回溯法好像更加花时间,就不打算写回溯法了.
package java_chapter4_7;public class Queens {private static final int N=8;private static int num=0;//统计可行解的个数public static void main(String[] args){int[][] chess=new int[N][N];putQueenAtRow(chess,0);}private static void putQueenAtRow(int[][] chess,int row){/* * 如果row=8>7 * 即刚刚好突破了递归的极限了 * 可以输出之前的排序了 */if(row==N){num++;System.out.println("输出第"+num+"个可行解棋盘");for(int i=0;i<N;i++){for(int j=0;j<N;j++){System.out.print(chess[i][j]+" ");}System.out.println();}return;}//创建一个临时的chess来保存数据int[][] chessTemp=chess.clone();/*向这一行 row(形参)的每一个位置都尝试放一次皇后 * 然后检测状态,安全就继续摆放下一个皇后 */for(int i=0;i<N;i++){//清除之前的摆放记录for(int j=0;j<N;j++){chessTemp[row][j]=0;}chessTemp[row][i]=1;if(isSafe(chessTemp,row,i)){putQueenAtRow(chessTemp,row+1);}}}private static boolean isSafe(int[][] chessTemp,int row,int col){int step=1;//因为第一排,即最上面这一排没有更上一层//所以不考虑其row-step(step=1)的时候while(row-step>=0){//考虑数值方向上的情况if(chessTemp[row-step][col]==1)return false;//考虑从左上到右下的对角线情况if(col-step>=0&&chessTemp[row-step][col-step]==1)return false;//考虑从左下到右上的对角线情况if(col+step<N&&chessTemp[row-step][col+step]==1)return false;step++;}return true;}}
最后面留下大神的blog: http://www.cnblogs.com/newflydd/tag/8%E7%9A%87%E5%90%8E/
写的非常好 膜拜
0 0
- 1_算法_八皇后问题
- 1700_八皇后问题
- 回溯法_八皇后问题
- prolog学习_八皇后问题
- 八皇后_回溯
- 1140_八皇后
- 1756_八皇后
- 剑指Offer_面试题28.5_字符串的排列扩展_排列组合_八皇后问题
- 八皇后问题[算法]
- 八皇后问题算法
- 算法问题-八皇后
- 算法--八皇后问题
- 算法-八皇后问题
- 算法八皇后问题
- 算法--八皇后问题
- 回溯_题目1140:八皇后
- 八皇后问题.递归算法.
- 【经典算法】八皇后问题
- 线性同余算法 (LCG)
- 确定性素性测试思想之Eratosthenes筛选法
- adfasfasfsaRKEKmnMRxUZKpxTgBEIqpNytOCOmhwUEZxkSsZgBuvkWqZtPYYoAsfwradfasfasfsaKVQCFFYRMMSAZKSVGAUNKD
- adfasfasfsaMmQZmINbkaRCnFngxbsGGXSgMpbRrMgQmMfLzwPHbdOTPVvoIDZFsfwradfasfasfsaZXTUGSGYQXRLWAINNNQAGS
- 第四章 碎片的生命周期
- 1_算法_八皇后问题
- API接口JWT方式的Token认证(下),客户端(Android)的实现
- NFC
- 插入排序(Insertion sort)
- JSON 解析--JObject
- 个人原创
- bitbucket 上传仓库问题记录。
- LintCode高级数据结构/Trie/并查集/搜索题总结
- 最大流-EK