蓝桥杯-2n皇后问题
本帖最后由 DAY 于 2016-11-30 22:15 编辑在自己的eclipse编译器里面可以编译通过,并且答案与题目的相同,但提交后出现“运行错误”这是怎么回事?
import java.util.Scanner;
/*输入的第一行为一个整数n,表示棋盘的大小。
接下来n行,每行n个0或1的整数,如果一个整数为1,
表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。*/
public class Main {
@SuppressWarnings("unused")
private static int step = 0 ;
//初始化数组
@SuppressWarnings("resource")
private static void setArrays(int[][]a){
Scanner sc = new Scanner(System.in) ;
for(int i =0 ;i < a.length ;++i){
for(int j =0 ; j < a.length;++j){
a = sc.nextInt() ;
}
}
}
//打印数组
@SuppressWarnings("unused")
private static void printArrays(int[][]a){
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
System.out.print(a+" ");
}
System.out.println();
}
}
//判断i,j 位置是否合法
@SuppressWarnings("unused")
private static boolean legalWhiteQueen(int[][]a,final int i ,final int j) {
for(int n = 0 ;n < i ; ++n){
for(int m = 0 ; m < a.length ; ++m){
if(a == 2){
if(Math.abs(i-n) == Math.abs(j- m) || j == m) return false;
}else continue ;
}
}
return true;
}
//判断i,j位置是否合法
@SuppressWarnings("unused")
private static boolean legalBlackQueen(int[][]a,final int i ,final int j) {
for(int n = 0 ; n < i ; n++){
for(int m = 0 ; m < a.length ;++m){
if(a == 3){
if(Math.abs(i-n) == Math.abs(j-m) || j == m)return false;
}
}
}
return true;
}
//TODO 其次判断黑皇后
private static void blackQueen(int[][]a,int tag){
if(tag == a.length){step++;/*System.out.println("step:" +step);printArrays(a);System.out.println();*/}
else{
for(int j = 0 ; j < a.length ; ++j){
if(a != 2 && a != 0 ){
a = 3;
if(legalBlackQueen(a, tag, j)){
blackQueen(a, tag+1);
}
a = 1;
}
}
}
}
// TODO 首先判断白皇后
@SuppressWarnings("unused")
private static void whiteQueen(int[][]a,int tag){
if(tag == a.length)blackQueen(a, 0);
else{
for(int j = 0 ; j < a.length ; ++j){
if(a != 0){
a = 2;
if(legalWhiteQueen(a, tag, j)){
whiteQueen(a, tag+1);
}
a = 1;
}
}
}
}
@SuppressWarnings({ "unused", "resource" })
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
int n = sc.nextInt() ;
int[][]a = new int ;
setArrays(a);
whiteQueen(a, 0);
System.out.println(step);
step = 0;
}
}
} @百日维新 编译环境和运行环境jre一样吗 本帖最后由 DAY 于 2016-9-24 15:55 编辑
如果把数据输入放在主函数main里面就可以提交了,这是为什么啊!
/*
* 蓝桥杯-2n皇后问题
* */
import java.util.Scanner;
/*输入的第一行为一个整数n,表示棋盘的大小。
接下来n行,每行n个0或1的整数,如果一个整数为1,
表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。*/
public class Main {
@SuppressWarnings("unused")
private static int STEP = 0 ;
//判断i,j 位置是否合法
@SuppressWarnings("unused")
private static boolean legalWhiteQueen(int[][]a,final int i ,final int j) {
for(int n = 0 ;n < i ; ++n){
for(int m = 0 ; m < a.length ; ++m){
if(a == 2){
if(Math.abs(i-n) == Math.abs(j- m) || j == m) return false;
}else continue ;
}
}
return true;
}
//判断i,j位置是否合法
@SuppressWarnings("unused")
private static boolean legalBlackQueen(int[][]a,final int i ,final int j) {
for(int n = 0 ; n < i ; n++){
for(int m = 0 ; m < a.length ;++m){
if(a == 3){
if(Math.abs(i-n) == Math.abs(j-m) || j == m)return false;
}
}
}
return true;
}
//TODO 其次判断黑皇后
private static void blackQueen(int[][]a,int tag){
if(tag == a.length){STEP++;/*System.out.println("step:" +step);printArrays(a);System.out.println();*/}
else{
for(int j = 0 ; j < a.length ; ++j){
if(a != 2 && a != 0 ){
a = 3;
if(legalBlackQueen(a, tag, j)){
blackQueen(a, tag+1);
}
a = 1;
}
}
}
}
// TODO 首先判断白皇后
@SuppressWarnings("unused")
private static void whiteQueen(int[][]a,int tag){
if(tag == a.length)blackQueen(a, 0);
else{
for(int j = 0 ; j < a.length; ++j){
if(a != 0){
a = 2;
if(legalWhiteQueen(a, tag, j)){
whiteQueen(a, tag+1);
}
a = 1;
}
}
}
}
@SuppressWarnings({ "unused", "resource" })
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt() ;
int[][]a = new int ;
for(int i =0 ;i < n ;++i){
for(int j =0 ; j < n;++j){
a = sc.nextInt() ;
}
}
whiteQueen(a, 0);
System.out.println(STEP);
}
}
页:
[1]