码迷,mamicode.com
首页 > 其他好文 > 详细

[HDU2553]N皇后问题(DFS)

时间:2019-05-29 23:19:49      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:ret   题意   条件   imp   n皇后   exti   uri   port   nal   

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=2553

题意

n<=10,输出N皇后问题的方法数。

题解

  • 可以使用各种方法。这里使用DFS。
  • 使用一维数组存储棋子位置。col[i]=j表示第i行的棋子放置在j列。
  • 由于n<=10,打表10个结果在数组中即可。
  • dfs(row)表示放置第row层(从0记)的棋子。dfs return条件是到了第n层,此时方法数++;

代码

import java.util.Scanner;

public class Main {
    final static int MAXN=10;
    public static int[] means=new int[MAXN+1];
    public static int[] col=new int[MAXN+1];
    
    public static void main(String args[]) {
        //打表
        for(int i=1;i<=MAXN;++i) {
            means[i]=0;
        }
        for(int n=1;n<=MAXN;++n) {
            dfs(0,n);
        }
        
        Scanner in=new Scanner(System.in);
        int n;
        while(true) {
            n=in.nextInt();
            if(n==0) {break;}
            System.out.println(means[n]);
        }
    }
    
    public static void dfs(int row,int n) {
        if(row==n) {
            ++means[n];
            return;
        }
        for(int j=0;j<n;++j) {
            col[row]=j;
            if(check(row,n)==true) {
                dfs(row+1,n);
            }
        }
    }
    
    public static boolean check(int row,int n) {
        for(int i=0;i<row;++i) {
            if(col[i]==col[row]||Math.abs(i-row)==Math.abs(col[i]-col[row])) {
                return false;
            }
        }
        return true;
    }
}

[HDU2553]N皇后问题(DFS)

标签:ret   题意   条件   imp   n皇后   exti   uri   port   nal   

原文地址:https://www.cnblogs.com/coding-gaga/p/10946413.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!