題目
如【圖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());
}
}