考试的时候没有做出来,没想到怎么对图进行初始化。赛后才知道可以遍历1到127,一共7为数字,1表示点亮,0表示不点亮,直接深搜就行,最后比较加入hash的节点和遍历到的节点数是否相等。
package test;
import java.util.*;
public class test12 {
public static void main(String[] args) {
int num=0;
for(int i=1;i<=127;i++) {
int[][] map=new int[6][6];
HashSet<Integer> hash=new HashSet<>();
String s=Integer.toBinaryString(i);
int n=s.length();
for(int j=1;j<=7-n;j++) {
s="0"+s;
}
System.out.print(s+" ");
int start=0;
for(int j=0;j<=6;j++) {
if(s.charAt(j)=='1') {
switch(j) {
case 0: map[0][1]=1;map[1][0]=1;start=0;hash.add(0);hash.add(1);break;
case 1: map[1][2]=1;map[2][1]=1;start=1;hash.add(2);hash.add(1);break;
case 2: map[2][3]=1;map[3][2]=1;start=2;hash.add(2);hash.add(3);break;
case 3: map[3][4]=1;map[4][3]=1;start=3;hash.add(3);hash.add(4);break;
case 4: map[4][5]=1;map[5][4]=1;start=4;hash.add(5);hash.add(4);break;
case 5: map[5][2]=1;map[2][5]=1;start=5;hash.add(5);hash.add(2);break;
case 6: map[5][0]=1;map[0][5]=1;start=5;hash.add(5);hash.add(0);break;
}
}
}
int[] vis=new int[6];
dfs(map,start,vis);
int sum=0;
for(int tmp:vis) {
sum+=tmp;
}
if(hash.size()==sum) {
num++;
System.out.print(sum);
}
System.out.println();
}
System.out.println(num);
}
static void dfs(int[][] map,int cur,int[] vis) {
vis[cur]=1;
for(int i=0;i<=5;i++) {
if(vis[i]==0 && map[cur][i]==1) dfs(map,i,vis);
}
}
}