第1次实验——NPC问题(回溯算法、聚类分析)

八皇后以及N皇后问题:

public class EightQueens {    
    static int b[]={0,0,0,0,0,0,0,0};    
    static int sum=0;    
    static int times=1;    
    public static void main(String[] args){    
        search(0);   
        System.out.println("一共有"+sum+"个结果。");            
    }     
    
    /**  
     * 搜索指定行  
     * @param row  
     */    
    private static void search(int row){    
        if(row==8){    
            sum++;    
            printResult();    
            return;    
        }    
        for(int i=0;i<8;i++){    
            if(check(row,i)){  //从下标为0行0列的元素开始进行验证  
                search(row+1);    
            }    
        }    
    }    
    /**  
     * 检查m,n 这个位置是否冲突   
     */    
    private static boolean check(int row,int col){    
        for(int i=0;i<row;i++){    
            if(b[i]==col){    
                return false;    
            }    
            if((b[i]+i)==(row+col)){    
                return false;    
            }    
            if((b[i]-i)==(col-row)){    
                return false;    
            }    
        }    
        b[row]=col;    
        return true;    
    }    
    /**  
     * 打印结果  
     */    
    private static void printResult(){  
        int a=times;  
        if(a < 4){  
        System.out.println("第" + times++ + "种结果是:");    
        for(int j=0;j<8;j++){  
            for(int i=0;i<8;i++){   
                if(b[i]==b[j]){ //让它自己跟自己比,从而得到可以输出Q的位置  
                    System.out.print("Q" + " ");  
                }else{  
                    System.out.print("X" +" ");  
                }  
            }  
            System.out.println(" ");   
          }   
        System.out.println(" ");  
        }   
    }  
}  

运行结果:




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值