美文网首页
dfs_第七届蓝桥杯方格填数

dfs_第七届蓝桥杯方格填数

作者: 掌灬纹 | 来源:发表于2019-03-16 11:24 被阅读0次

方格填数

填入0~9的数字。要求:连续的两个数字不能相邻。

(左右、上下、对角都算相邻)

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

请填写表示方案数目的整数。---------结果 1580

图1.jpg

深搜模板:回溯-剪枝

从第一个格子开始,选择0-9数填入并且向右依次填入,每次填完最后一列另起一行。

值得一提的题目中没有明确说明数字不可重复使用,但结果是数字不可重复使用计算的结果1580,一个小技巧灵活用整数除法和取余的特性进行深搜

public class 方格填数 {

static int res = 0;

public static void main(String[] args) {

int [][] arr = new int[3][4];

for(int i = 0; i < 3; i++) {

for(int j = 0; j < 4; j++) {//初始化一个较小的数,不产生影响

arr[i][j] = -20;

}

}

dfs(arr, 0, 1);//从第二个方格开始填数

System.out.println(res);

}

private static void dfs(int[][] arr, int x, int y) {

if(x == 2&&y == 3) {//方格填完

res++;

return;//统计下一个情况

}

if(arr[x][y] == -20) {

for(int i = 0 ;i <= 9; i++) {

if(check(i, arr, x, y)&&check2(i, arr, x, y)) {//剪枝

arr[x][y] = i;

dfs(arr, x + (y + 1)/4, (y + 1)%4);

arr[x][y] = -20;//回溯

}

}

}else {

dfs(arr, x + (y + 1)/4, (y + 1)%4);

}

}

//0~9不重复

private static boolean check2(int v, int[][] arr, int x, int y) {

for(int i = 0; i < 3; i++) {

for(int j = 0; j < 4; j++) {

if(v == arr[i][j])

return false;

}

}

return true;

}

//检查左,上,左上,右上不相邻

private static boolean check(int v, int[][] arr, int x, int y) {

int[][] dir = {//这里写全方便理解,真正代码可以按上边注释来写结果相同

{-1, -1},{-1, 0},{-1, 1},

{0, -1}, {0, 1},

{1, -1},{1, 0}, {1, 1}

};

for(int i = 0; i < 8; i++) {

int xx = x + dir[i][0];

int yy = y + dir[i][1];

if(xx >= 0&&xx < 3&&yy >= 0&&yy < 4) {

if(Math.abs(arr[xx][yy] - v) <= 1)

return false;

}

}

return true;

}

}

相关文章

  • dfs_第七届蓝桥杯方格填数

    方格填数 填入0~9的数字。要求:连续的两个数字不能相邻。 (左右、上下、对角都算相邻) 一共有多少种可能的填数方...

  • [蓝桥杯2016初赛]方格填数

    题目描述 如下的10个格子,填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少...

  • [蓝桥杯2015决赛]方格填数

    题目描述 在2行5列的格子中填入1到10的数字。要求:相邻的格子中的数,右边的大于左边的,下边的大于上边的。如下图...

  • 蓝桥杯填方格-填数问题

    问题描述 方格填数 如下的10个格子 填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)...

  • 方格填数

    原博 方格填数 如下的10个格子填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有...

  • 蓝桥杯 方格分割

    标题:方格分割 6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。 如图:p1.png, p2...

  • 生日蜡烛

    第七届蓝桥杯-生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算...

  • 蓝桥杯-排他平方数

    题目标题: 排它平方数 小明正看着 203879 这个数字发呆。原来,203879 * 203879 = 4156...

  • 第九届蓝桥杯_方格计数

    标题:方格计数 如图p1.png所示,在二维平面上有无数个1x1的小方格。 我们以某个小方格的一个顶点为圆心画一个...

  • 第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题...

网友评论

      本文标题:dfs_第七届蓝桥杯方格填数

      本文链接:https://www.haomeiwen.com/subject/xgbjmqtx.html