鱼C论坛

 找回密码
 立即注册
查看: 5072|回复: 3

蓝桥杯-2n皇后问题

[复制链接]
发表于 2016-9-23 22:32:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[i][j] = 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[i][j]+" ");
                        }
                        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[n][m] == 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[n][m] == 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[tag][j] != 2 && a[tag][j] != 0 ){
                                        a[tag][j] = 3;
                                        if(legalBlackQueen(a, tag, j)){
                                                blackQueen(a, tag+1);
                                        }
                                        a[tag][j] = 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[tag][j] != 0){
                                        a[tag][j] = 2;
                                        if(legalWhiteQueen(a, tag, j)){
                                                whiteQueen(a, tag+1);
                                        }
                                        a[tag][j] = 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[n][n] ;
                        
                        setArrays(a);
        
                        whiteQueen(a, 0);
                        System.out.println(step);
                        step = 0;
                }
        }
}
2n皇后问题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-23 22:35:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-24 11:33:07 | 显示全部楼层
编译环境和运行环境jre一样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[n][m] == 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[n][m] == 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[tag][j] != 2 && a[tag][j] != 0 ){
                                        a[tag][j] = 3;
                                        if(legalBlackQueen(a, tag, j)){
                                                blackQueen(a, tag+1);
                                        }
                                        a[tag][j] = 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[tag][j] != 0){
                                        a[tag][j] = 2;
                                        if(legalWhiteQueen(a, tag, j)){
                                                whiteQueen(a, tag+1);
                                        }
                                        a[tag][j] = 1;
                                }
                        }
                        
                }
                
                
        }
        
        @SuppressWarnings({ "unused", "resource" })
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);

                        int n = sc.nextInt() ;
                        int[][]a = new int[n][n] ;
                        
                        for(int i =0 ;i < n ;++i){
                                for(int j =0 ; j < n;++j){
                                        a[i][j] = sc.nextInt() ;
                                }
                        }
                        whiteQueen(a, 0);
                        System.out.println(STEP);
                        
                
        }
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表