DAY 发表于 2016-9-23 22:32:03

蓝桥杯-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;
                }
        }
}

无符号整形 发表于 2016-9-23 22:35:33

@百日维新

百日维新 发表于 2016-9-24 11:33:07

编译环境和运行环境jre一样吗

DAY 发表于 2016-9-24 13:32:43

本帖最后由 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]
查看完整版本: 蓝桥杯-2n皇后问题