62,614
社区成员
发帖
与我相关
我的任务
分享
boolean isOk(int i, int j, int x) {
if(used[x]) return false;
if(i>0) {
int sum = x+m[i-1][j];
if(sum <= 11 || sum>=41 || !p[sum]) return false;
}
if(j>0) {
int sum = x+m[i][j-1];
if(sum <= 11 || sum>=41 || !p[sum]) return false;
}
return true;
}
import java.util.Arrays;
public class Pgrid {
boolean[] p = new boolean[50];
int[][] m = new int[5][5];
boolean[] used = new boolean[26];
Pgrid() {
p[2] = p[3] = p[5] = p[7] = p[11] = p[13] = true;
p[17] = p[19] = p[23] = p[29] = p[31] = p[37] = true;
p[41] = p[43] = p[47] = true;
}
boolean isOk(int i, int j, int x) {
if(used[x]) return false;
if(i>0 && !p[x+m[i-1][j]]) return false;
if(j>0 && !p[x+m[i][j-1]]) return false;
return true;
}
void fill(int index) {
if(index==25) {
for(int i=0; i<5; i++)
System.out.println(Arrays.toString(m[i]));
System.out.println("============");
System.exit(0); // or return; if need all results
}
int i = index/5;
int j = index%5;
for(int x=1; x<=25; x++) {
if(isOk(i, j, x)) {
m[i][j] = x;
used[x] = true;
fill(index+1);
used[x] = false;
}
}
}
public static void main(String[] args) {
new Pgrid().fill(0);
}
}