剪邮票问题,我开始也不会,看了题解
首先从12中选出5个,5个for循环,用数组存储,然后judge,返回值为true,count++;
用dfs深搜,设置一个布尔类型的数组,用于判断
package it;
//剪邮票
public class Main1 {
static int a[]=new int [100];
public static void main(String[] args) {
int count=0;
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(judge()){
count++;
}
}
}
}
}
}
System.out.println(count);
}
private static boolean judge() {
boolean ed[]=new boolean[5];
dfs(ed,0);
return ed[0]&&ed[1]&&ed[2]&&ed[3]&&ed[4];
}
private static void dfs(boolean[] ed, int i) {
ed[i]=true;
for(int j=0;j<ed.length;j++){
if(!ed[j]&&(a[i]/4==a[j]/4)&&(a[i]==a[j]+1||a[i]==a[j]-1)){
dfs(ed,j);
}
if(!ed[j]&&(a[i]==a[j]+4||a[i]==a[j]-4)){
dfs(ed,j);
}
}
}
}