zoukankan      html  css  js  c++  java
  • 蓝桥杯比赛javaB组练习《方格填数》

    方格填数

    如下的10个格子
       +--+--+--+
       |  |  |  |
    +--+--+--+--+
    |  |  |  |  |
    +--+--+--+--+
    |  |  |  |
    +--+--+--+

    (如果显示有问题,也可以参看【图1.jpg】)

    填入0~9的数字。要求:连续的两个数字不能相邻。
    (左右、上下、对角都算相邻)

    一共有多少种可能的填数方案?

    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    代码以及注释如下:

    public class fourteen {
    
    	static int count = 0;  
        public static void main(String[] args) {  
            int a[] = new int[12];  
            boolean visit[] = new boolean[10];//因为只用到了a[1]-a[10];  
            fourteen t=new fourteen();
            t.dfs(a,visit,1);  
            System.out.println(count);  
        }  
      
        void dfs(int[] a, boolean[] visit, int num) {  
            // TODO Auto-generated method stub  
            if (num==11) {          //这里是求种类数,只要满足  num=11即可
                if (judge(a)) {     //judge即是判断八个方向是否非法
                    count++;  
                }  
                return;  
            }  
            for (a[num] = 0; a[num] < 10; a[num]++) {  
                if (visit[a[num]]==false) {     //boolean类型数组初始化值均为 false
                    visit[a[num]]=true;          //立出访问标志
                    num = num + 1;  
                    dfs(a, visit, num);        //递归运行判断是否邻近允许
                    num = num - 1;             //回溯算法之精髓,如果碰壁就倒退执行
                    visit[a[num]]=false;  
                }  
            }  
        }  
      
        public boolean judge(int[] a) {  
            if ((a[1]==a[2]+1||a[1]==a[2]-1)||  
                    (a[1]==a[6]+1||a[1]==a[6]-1)||  
                    (a[1]==a[5]+1||a[1]==a[5]-1)||  
                    (a[1]==a[4]+1||a[1]==a[4]-1)) {  
                return false;  
            }else if ((a[2]==a[5]+1||a[2]==a[5]-1)||  
                    (a[2]==a[3]+1||a[2]==a[3]-1)||  
                    (a[2]==a[7]+1||a[2]==a[7]-1)||  
                    (a[2]==a[6]+1||a[2]==a[6]-1)) {  
                return false;  
            }else if ((a[3]==a[6]+1||a[3]==a[6]-1)||  
                    (a[3]==a[7]+1||a[3]==a[7]-1)) {  
                return false;  
            }else if ((a[4]==a[5]+1||a[4]==a[5]-1)||  
                    (a[4]==a[8]+1||a[4]==a[8]-1)||  
                    (a[4]==a[9]+1||a[4]==a[9]-1)) {  
                return false;  
            }else if ((a[6]==a[7]+1||a[6]==a[7]-1)||  
                    (a[6]==a[10]+1||a[6]==a[10]-1)||  
                    (a[6]==a[9]+1||a[6]==a[9]-1)) {  
                return false;  
            }else if (a[7]==a[10]+1||a[7]==a[10]-1) {  
                return false;  
            }else if (a[8]==a[9]+1||a[8]==a[9]-1) {  
                return false;  
            }else if (a[9]==a[10]+1||a[9]==a[10]-1) {  
                return false;  
            }else if ((a[5]==a[6]+1||a[5]==a[6]-1)||  
                    (a[5]==a[10]+1||a[5]==a[10]-1)||  
                    (a[5]==a[9]+1||a[5]==a[9]-1)||  
                    (a[5]==a[8]+1||a[5]==a[8]-1)) {  
                return false;  
            }  
            return true;  
        }  
      
    }
    

      

    运行结果如下:

    1580

  • 相关阅读:
    定时器
    sortable.js 华丽丽的排序
    jqGrid一些操作
    session 共享
    数组排序 和 二分法查找
    关于map
    文件导入
    文件导出
    文件下载
    float 保留两位小数
  • 原文地址:https://www.cnblogs.com/liushuncheng/p/6546047.html
Copyright © 2011-2022 走看看