zoukankan      html  css  js  c++  java
  • JAVA实现N皇后问题(回溯法)

    package com.leetCode;
    /**
     * 
    Follow up for N-Queens problem.
    Now, instead outputting board configurations, return the total number of distinct solutions.
     * @author Zealot
     * @date 2015年7月23日 下午6:14:49
     */
    public class NQueensII {
    	int[] x;//当前解  
    	int N;//皇后个数
    	 int sum = 0;//当前已找到的可行方案数
    	public int totalNQueens(int n) {
    		N = n;
    		x = new int[N+1];
    		backTrace(1);
    		return sum;
    	}
    	/**
    	 * col行这个点,x[col]列这个点。与已经存在的几个皇后。是否符合要求,放到这个位置上,
    	 * @param col
    	 * @return
    	 */
    	private boolean place(int col){
    		for(int i = 1; i < col; i++){
    			if(Math.abs(col - i)==Math.abs(x[col]-x[i])||x[col]==x[i]){
    				return false;
    			}
    		}
    		return true;
    	}
    	private void backTrace(int t) {
    		if(t>N){
    			sum++;
    		}else {
    			//第t行。遍历全部的节点
    			for(int j = 1; j <= N; j++) {
    				 x[t] = j ;
    				 //假设第j个节点能够放下皇后
    				if(place(t)){
    					//接着放下一个
    					backTrace(t+1);
    				}
    			}
    		}
    		
    	}
    	public static void main(String[] args) {
    		NQueensII n = new NQueensII();
    		System.out.println(n.totalNQueens(8));
    	}
    }
    

  • 相关阅读:
    webpack学习_管理输出(管理资源插件)
    vue路由
    vue动态组件,组件缓存
    vue组件间传参
    模块化
    安装Vue脚手架,创建Vue项目
    Vue常用指令
    VUE概述
    小程序调用微信支付接口
    Android音视频开发之-WebRTC技术实践
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7131708.html
Copyright © 2011-2022 走看看