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));
    	}
    }
    

  • 相关阅读:
    sshpass连接主机以及执行命令
    elk集群配置并破解x-pack
    socket实现简单通信会话
    docker容器跨宿主机通信
    docker运行wordpress
    centos7 利用docker运行nginx项目
    docker容器基础命令
    docker镜像基础命令
    vue中使用延时加载
    less
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7131708.html
Copyright © 2011-2022 走看看