如【图1.jpg】, 有12张连在一起的12生肖的邮票。

现在你要从中剪下5 张来,要求必须是连着的。
(仅仅连接一个角不算相连) 比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。


请你计算,一共有多少种不同的剪取方法。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
import java.util.Scanner;
public class Main {
static int[] a=new int[5];
static int ans=0;
public static void main(String[] args) {
for(int a1=0;a1<12;a1++){
for(int a2=a1+1;a2<12;a2++){
for(int a3=a2+1;a3<12;a3++){
for(int a4=a3+1;a4<12;a4++){
for(int a5=a4+1;a5<12;a5++){
a[0]=a1;
a[1]=a2;
a[2]=a3;
a[3]=a4;
a[4]=a5;
if(check()){
ans++;
}
}
}
}
}
}
System.out.println(ans);
}
public static boolean check(){
boolean[] biaoji=new boolean[5];
dfs(biaoji,0);
return biaoji[0]&&biaoji[1]&&biaoji[2]&&biaoji[3]&&biaoji[4];
}
public static void dfs(boolean[] biaoji,int x){
biaoji[x]=true;
for(int i=0;i<biaoji.length;i++){
if(!biaoji[i]&&(a[x]/4==a[i]/4)&&(a[x]==a[i]-1||a[x]==a[i]+1)){
dfs(biaoji,i);
}
if(!biaoji[i]&&(a[x]==a[i]-4||a[x]==a[i]+4)){
dfs(biaoji,i);
}
}
}
}
文章描述了一个问题,给定12张邮票,要求连续剪下5张且必须相邻,通过使用Java编程中的二维数组和深度优先搜索(DFS)算法计算所有可能的剪取方式总数。
1690

被折叠的 条评论
为什么被折叠?



