题目1254:N皇后问题
2016-01-17 19:20
295 查看
题目1254:N皇后问题
时间限制:1 秒
内存限制:128 兆
特殊判题:否
题目描述:
N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。
你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。
输入:
输入包含多组测试数据。
每组测试数据输入一个整数n(3<n<=13),表示有n*n的棋盘,总共摆放n个皇后。
输出:
对于每组测试数据,输出总共不同的摆放情况个数,结果单独一行。
样例输入:
样例输出:
时间限制:1 秒
内存限制:128 兆
特殊判题:否
题目描述:
N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。
你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。
输入:
输入包含多组测试数据。
每组测试数据输入一个整数n(3<n<=13),表示有n*n的棋盘,总共摆放n个皇后。
输出:
对于每组测试数据,输出总共不同的摆放情况个数,结果单独一行。
样例输入:
4
样例输出:
2
import java.io.BufferedInputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner cin = new Scanner(new BufferedInputStream(System.in)) ; PrintWriter cout = new PrintWriter(System.out) ; int[] dp = new int[14] ; for(int i = 3 ; i <= 13 ; i++) dp[i] = new Task().solve(i) ; while(cin.hasNext()){ cout.println( dp[cin.nextInt()] ) ; // cout.flush() ; } cout.flush() ; } } class Task{ boolean[][] used ; int n ; int solve(int n){ this.n = n ; used = new boolean ; for(int i = 0 ; i < n ; i++) Arrays.fill(used[i] , false) ; return dfs(0) ; } int dfs(int row){ if(row == n) return 1 ; int sum = 0 ; for(int col = 0 ; col < n ; col++){ if(valid(row , col)){ used[row][col] = true ; sum += dfs(row+1) ; used[row][col] = false ; } } return sum ; } boolean valid(int row , int col){ for(int r = 0 ; r < row ; r++){ if(used[r][col]) return false ; } int x = row , y = col ; while(x >= 0 && y >= 0){ if(used[x][y]) return false ; x-- ; y-- ; } x = row ; y = col ; while(x >= 0 && y < n){ if(used[x][y]) return false ; x-- ; y++ ; } return true ; } }
相关文章推荐
- 大数据
- HTML5之FileReader的使用
- iwork8平板电脑安装ubuntu,Z3735d/f系列CPU通用
- Android自动化测试中uiautomator批改uiautomatorviewer获取不到动态界面的缺陷
- .framework以及.a合并相关
- JS forEach函数
- Google Java编程库Guava介绍
- 【codevs1666】买票
- bShare分享-分享到微信、微博、QQ
- flex布局的使用,纪念第一次开发手机网站
- typedef的用法 单向链表的查找、增加、删除、销毁。
- 5、数组
- java String 类的基本方法
- 经典排序算法 - 归并排序Merge sort
- Android中EditText+Button组合,输入板无法收起问题解决方法
- PHPExcel探索之旅---阶段一
- 搁浅一笺思念,静候几度时光。
- 输出 函数调用栈
- 短GUID
- hdu 1074 Doing Homework 状态压缩dp