题目
如【图1】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2】,【图3】中,粉红色所示部分就是合格的剪取。
请你计算,一共有多少种不同的剪取方法。
代码
import java.util.*;
public class Main{
static int count=0;
static int[] a=new int[5];
static HashSet<String>hashset=new HashSet<String>();
static boolean check(){
boolean flag[]=new boolean[5];
dfs(flag,0);
return flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4];
}
static void dfs(boolean[] flag,int n){
flag[n]=true;
for(int i=0;i<5;i++){
if(!flag[i]&&(a[i]/4==a[n]/4)&&(a[i]==a[n]-1||a[i]==a[n]+1))
dfs(flag,i);
if(!flag[i]&&(a[i]%4==a[n]%4)&&(a[i]==a[n]-4||a[i]==a[n]+4))
dfs(flag,i);
}
}
public static void main(String[] args){
for(a[0]=0;a[0]<12;a[0]++)
for(a[1]=a[0]+1;a[1]<12;a[1]++)
for(a[2]=a[1]+1;a[2]<12;a[2]++)
for(a[3]=a[2]+1;a[3]<12;a[3]++)
for(a[4]=a[3]+1;a[4]<12;a[4]++)
if(check())
hashset.add(""+a[0]+a[1]+a[2]+a[3]+a[4]);
System.out.println(hashset.size());
}
}