备考蓝桥杯(18)方格填数 java实现

package pers.robert.lanqiaobei07;
/**
 * 
方格填数

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

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

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

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

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
 * @author Robert
 *
 */
public class The06PutNumberDemo1_question {
	static int sum = 0 ;
	     public static void main(String[] args) {
	        int a[] = {0,1,2,3,4,5,6,7,8,9};
	        int b[] = new int[10];
	          String s = "";
	          f(a,b,0,s);
	          System.out.println(sum);
	   }
	     private static void f(int[] a,int[] b,int k,String s) {
	         if(k!=0 && k!=1 && k!=4 && k!=8 ){//非左侧第一排元素,只要左侧元素比右侧元素小一,就return;左侧
	             if(Math.abs(b[k-1]-b[k-2])==1) return;
	         }
	        if(k>=4 && k<=10 && k!=7){//第二排和第三排除了第7个元素,右上角
            if(Math.abs(b[k-1]-b[k-4])==1) return;
	         }
	        if(k>=5 && k<=10){//第二排和第三排正上方
	             if(Math.abs(b[k-1]-b[k-5])==1) return;
	       }
	         if(k==6 || k==7 || k==9 || k==10){//左上方
	             if(Math.abs(b[k-1]-b[k-6])==1) return;
	         }
	        
	         if(k==a.length) {
	             sum++;
	            System.out.println(s);
	             return;
	        }
	        for(int i=0;i

分析:

	        for(int i=0;i

这里是全排列+回溯



你可能感兴趣的:(java,蓝桥杯)