您的位置:首页 > 其它

蓝桥杯之方格填数

2017-05-07 11:28 190 查看
方格填数



在2行5列的格子中填入1到10的数字。

要求:

相邻的格子中的数,右边的大于左边的,下边的大于上边的。

如【图1.png】所示的2种,就是合格的填法。

请你计算一共有多少种可能的方案。

此题用回溯法解,最简单不过了

package 第六届;

public class Exe50 {

static int sum = 0;

public static void main(String[] args) {
int num[] = new int[10];
for (int i = 0; i < num.length; i++) {
num[i] = i+1;
}
dfs(num,0);
System.out.println("总共"+sum+"种");
}

private static void dfs(int[] num, int begin) {
if (begin>=num.length) {
check(num);
return  ;
}
for (int i = begin; i < num.length; i++) {
int temp = num[begin];
num[begin] = num[i];
num[i] = temp;
dfs(num,begin+1);
temp = num[begin];
num[begin] = num[i];
num[i] = temp;
}
}

private static void check(int[] num) {
int count = 0;
int  now[][] = new int[2][5];
for (int i = 0; i < now.length; i++) {
for (int j = 0; j < now[i].length; j++) {
now[i][j] = num[count++];
}
}

for (int i = 0; i < now.length; i++) {
for (int j = 0; j < now[i].length-1; j++) {
if (now[i][j]> now[i][j+1]) {
return ;
}
}
}

for (int j = 0; j < now[0].length; j++) {
if (now[0][j]> now[1][j]) {
return ;
}
}

System.out.println("第"+(++sum)+"种:");
for (int i = 0; i < now.length; i++) {
for (int j = 0; j < now[i].length; j++) {
System.out.print(now[i][j]+"\t");
}
System.out.println();
}
System.out.println("\n\n");
}

}


打赏一点钱,帮我买杯咖啡,继续创作,谢谢大家!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息