解题思想:全排列➕去重操作
全排列核心代码部
for(int i=begin;i<end;i++) {
int temp=n[i];
n[i]=n[begin];
n[begin]=temp;
qpl(n, begin+1, end);
temp=n[i];
n[i]=n[begin];
n[begin]=temp;
}
去重操作代码部
if(begin==end) {
HashSet<Integer>check=new HashSet<Integer>();
check.add(n[0]+n[1]+n[2]);
check.add(n[3]+n[4]+n[5]);
check.add(n[6]+n[7]+n[8]);
check.add(n[0]+n[3]+n[6]);
check.add(n[1]+n[4]+n[7]);
check.add(n[2]+n[5]+n[8]);
check.add(n[0]+n[4]+n[8]);
check.add(n[2]+n[4]+n[6]);
if(check.size()==8) {
sum++;
}
}
整体:
package 一六javaB组决赛;
import java.util.HashSet;
public class B{
static int sum=0;
static HashSet<int[]>hash=new HashSet<int[]>();
public static void qpl(int n[],int begin,int end) {
if(begin==end) {
HashSet<Integer>check=new HashSet<Integer>();
check.add(n[0]+n[1]+n[2]);
check.add(n[3]+n[4]+n[5]);
check.add(n[6]+n[7]+n[8]);
check.add(n[0]+n[3]+n[6]);
check.add(n[1]+n[4]+n[7]);
check.add(n[2]+n[5]+n[8]);
check.add(n[0]+n[4]+n[8]);
check.add(n[2]+n[4]+n[6]);
if(check.size()==8) {
sum++;
}
}
else {
for(int i=begin;i<end;i++) {
int temp=n[i];
n[i]=n[begin];
n[begin]=temp;
qpl(n, begin+1, end);
temp=n[i];
n[i]=n[begin];
n[begin]=temp;
}
}
}
public static void main(String[] args) {
int n[]= {1,2,3,4,5,6,7,8,9};
qpl(n,0,9);
System.out.print(sum/8);
}
}
1206

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



