import java.util.Scanner;
public class Main {
static int j=0;
static int[][] a=new int[3][4];
static int[] v={0,0,0,0,0,0,0,0,0,0};
public static boolean judge(int i,int j,int k)
{
if (i-1>=0 && (a[i - 1][j] == k - 1 || a[i - 1][j] == k + 1) )
return false;
if (j-1>=0 && (a[i][j - 1] == k + 1 || a[i][j - 1] == k - 1) )
return false;
if (i-1>=0 && j-1>=0 && (a[i - 1][j - 1] == k + 1 || a[i - 1][j - 1] == k - 1))
return false;
if (i-1>=0 && j+1<4 && (a[i - 1][j + 1] == k + 1 || a[i - 1][j + 1] == k - 1))
return false;
if (j + 1 < 4 && (a[i][j + 1] == k + 1 || a[i][j + 1] == k - 1))
return false;
if (i + 1 < 3 && (a[i + 1][j] == k + 1 || a[i + 1][j] == k - 1))
return false;
if (i + 1 < 3 && j - 1 >= 0 && (a[i + 1][j - 1] == k + 1 || a[i + 1][j - 1] == k - 1))
return false;
if (i + 1 < 3 && j + 1 < 4 && (a[i + 1][j + 1] == k + 1 || a[i + 1][j + 1] == k - 1))
return false;
return true;
}
public static void huisu(int x,int y)
{
if(x==2&&y==3)
{
j++;
return;
}
for(int k=0;k<10;k++)
{
if(judge(x,y,k)&&v[k]==0)
{
a[x][y]=k;
v[k]=1;
if(y<3)
huisu(x,y+1);
else
huisu(x+1,0);
a[x][y]=-9;
v[k]=0;
}
}
}
public static void main(String[] args) {
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
a[i][j]=-9;
huisu(0,1);
System.out.print(j);
}
}
方格填数回溯法
最新推荐文章于 2022-07-15 21:52:45 发布