方格填数

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

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

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

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

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

public class Main {
    static int count;
    public static void main(String[] args) {
        int[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        dfs(a, 0);
        System.out.println(count);
    }
    private static void dfs(int[] a, int k) {
        if(k == a.length - 1) {
            if(Math.abs(a[0] - a[1]) != 1 && Math.abs(a[0] - a[3]) != 1 && Math.abs(a[0] - a[4]) != 1 && Math.abs(a[0] - a[5]) != 1
                    && Math.abs(a[1] - a[2]) != 1 && Math.abs(a[1] - a[4]) != 1 && Math.abs(a[1] - a[5]) != 1 && Math.abs(a[1] - a[6]) != 1
                    && Math.abs(a[2] - a[5]) != 1 && Math.abs(a[2] - a[6]) != 1
                    && Math.abs(a[3] - a[4]) != 1 && Math.abs(a[3] - a[7]) != 1 && Math.abs(a[3] - a[8]) != 1
                    && Math.abs(a[4] - a[5]) != 1 && Math.abs(a[4] - a[7]) != 1 && Math.abs(a[4] - a[8]) != 1 && Math.abs(a[4] - a[9]) != 1
                    && Math.abs(a[5] - a[6]) != 1 && Math.abs(a[5] - a[8]) != 1 && Math.abs(a[5] - a[9]) != 1
                    && Math.abs(a[6] - a[9]) != 1
                    && Math.abs(a[7] - a[8]) != 1
                    && Math.abs(a[8] - a[9]) != 1) {
                System.out.println("  " + a[0] + " " + a[1] + " " + a[2]);
                System.out.println(a[3] + " " + a[4] + " " + a[5] + " " + a[6]);
                System.out.println(a[7] + " " + a[8] + " " + a[9]);
                count ++;
                return;
            }
        }
        for(int i = k; i < a.length; i ++) {
            {
                int x = a[k];
                a[k] = a[i];
                a[i] = x;
            }
            dfs(a, k + 1);
            {
                int x = a[k];
                a[k] = a[i];
                a[i] = x;
            }
        }
    }
}

原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8576031.html

时间: 2024-10-07 20:28:40

方格填数的相关文章

第七届蓝桥杯C\C++B组省赛题目——方格填数

第一部分:题目 方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ (如果显示有问题,也可以参看下图) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 第二部分:思路 这个题目有点表述不明,不知道0~

蓝桥杯 方格填数 回溯法

方格填数 如下的10个格子   +--+--+--+   |  |  |  |+--+--+--+--+|  |  |  |  |+--+--+--+--+|  |  |  |+--+--+--+ (如果显示有问题,也可以参看[图1.jpg]) 填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 回溯法解决的源代码如下: #include<ios

hdoj 3657 Game 【最小割 方格填数加强版】

Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1076    Accepted Submission(s): 456 Problem Description onmylove has invented a game on n × m grids. There is one positive integer on each g

第七届蓝桥杯—第六题||方格填数

如图,如下的10个格子,填入0~9的数字.要求:连续的两个数字不能相邻. (左右.上下.对角都算相邻)一共有多少种可能的填数方案? 请填写表示方案数目的整数. 思路:直接 暴力求解,依次向每个格子填数与已经填入的进行比较是否连续,即:是否两者之差的绝对值为1. 答案:  1580 (我考虑每个数字都不相同) #include<iostream> #include<cmath> using namespace std; int main(void){ int count=0; for

每日算法之方格填数

如下的10个格子 参看下图填入0~9的数字.要求:连续的两个数字不能相邻.(左右.上下.对角都算相邻) 一共有多少种可能的填数方案? 请填写表示方案数目的整数. 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. 个人认为也是属于解法类型的,还是需要借助前面的题目,只是验证方法不一样而已 1 package Square_Fill; 2 3 public class Main{ 4 static int count =0; 5 6 public static void main(

HDU-1794 方格填数 (贪心+四分)

题目大意:给一个由自然数构成的nxn方阵,其中有k个元素为0,现在要从给出的m个元素中挑出k个填入矩阵,是和的增量最大.和定义为所有子方阵上的元素之和. 题目分析:对于尺寸固定的方阵,计算和的时候每个元素做加数的次数是可以求出的,只需将最大的数放入做加数次数最多的位置,以此类推,便得到答案.要预先处理出每个位置上的元素做加数的次数,我用的四分. 代码如下: # include<cstdio> # include<cstring> # include<iostream>

C++ P1187 方格填数

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std; int N,a[15][15],t,moh[]={-1,1,0,0},mol[]={0,0,-1,1};bool back,u[105],p[105][105];//p用于判断每一个数和那些数字相加是质数: /*思路:1.n^2-1步:2.第k步走出去以后有n^2-k+1种选择:3.最多

P1004 方格取数

P1004 方格取数 题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0 0 7 0 0 0 0 0 0 14 0 0 0 0 0 21 0 0 0 4 0 0 0 0 15 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . B 某人从图的左上角的A点出发,可以向下行走,也可以向右走,直到到达右下角

[CodeVs1227]方格取数2(最大费用最大流)

网络流24题的坑还没填完就来搞其他题,你真的要TJ? 写这题给自己的费用流攒个模板. 题目大意:一个n*n的矩阵,每格有点权,从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格子的数取出来,该格子的数就变成0,这样一共走K次,现在要求K次所达到的方格的数的和最大. 啊简单的费用流.每个点i拆成i和i',连一条容量为1的边价值为点权,再连一条容量inf的边价值为0来让这个点能被经过,然后S连(1,1)容量k价值0,i'和右.下的点连容量inf价值0的边,(n,n)'连T容