8皇后的衍生问题
发布网友
发布时间:2024-03-01 09:33
我来回答
共6个回答
热心网友
时间:2024-06-13 16:16
下面的代码运行速度很快,结束时会给出一个答案,打出每个“皇后”放置位置的坐标(注意,最左上角的坐标是0,0)
/**选择一个方案,使用五个皇后就可以控制一个8*8的棋盘上所有的格式*/
public class Queen
{
public static void main(String[] args)throws Exception
{
int i=0,j=0,k,m,n;
int[][] board=new int[8][8];
java.util.Random r=new java.util.Random();
while(true)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
board[i][j]=0;
}
}
for(k=0;k<5;k++)
{
if(k==0)
{
i=r.nextInt(8);
j=r.nextInt(8);
}
else
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==0)break;
}
if(j<8)break;
}
}
board[i][j]=Integer.MIN_VALUE;
for(m=0;m<8;m++)
{
board[i][m]++;
board[m][j]++;
}
for(m=i+1,n=j+1;m<8&&n<8;m++,n++)board[m][n]++;
for(m=i-1,n=i-1;m>=0&&n>=0;m--,n--)board[m][n]++;
for(m=i-1,n=j+1;m>=0&&n<8;m--,n++)board[m][n]++;
for(m=i+1,n=i-1;m<8&&n>=0;m++,n--)board[m][n]++;
}
boolean b=true;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==0)b=false;
}
}
if(b)break;
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]<0)
{
System.out.println(""+i+","+j);
}
}
}
}
}
热心网友
时间:2024-06-13 16:16
用8皇后的非递归解法,每当放满5个皇后时检查一下代表各行、列、斜的几个数组有没有可以放皇后的不就行了么?
热心网友
时间:2024-06-13 16:17
**选择一个方案,使用五个皇后就可以控制一个8*8的棋盘上所有的格式*/
public class Queen
{
public static void main(String[] args)throws Exception
{
int i=0,j=0,k,m,n;
int[][] board=new int[8][8];
java.util.Random r=new java.util.Random();
while(true)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
board[i][j]=0;
}
}
for(k=0;k<5;k++)
{
if(k==0)
{
i=r.nextInt(8);
j=r.nextInt(8);
}
else
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==0)break;
}
if(j<8)break;
}
}
board[i][j]=Integer.MIN_VALUE;
for(m=0;m<8;m++)
{
board[i][m]++;
board[m][j]++;
}
for(m=i+1,n=j+1;m<8&&n<8;m++,n++)board[m][n]++;
for(m=i-1,n=i-1;m>=0&&n>=0;m--,n--)board[m][n]++;
for(m=i-1,n=j+1;m>=0&&n<8;m--,n++)board[m][n]++;
for(m=i+1,n=i-1;m<8&&n>=0;m++,n--)board[m][n]++;
}
boolean b=true;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==0)b=false;
}
}
if(b)break;
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]<0)
{
System.out.println(""+i+","+j);
}
}
}
}
}
**选择一个方案,使用五个皇后就可以控制一个8*8的棋盘上所有的格式*/
public class Queen
{
public static void main(String[] args)throws Exception
{
int i=0,j=0,k,m,n;
int[][] board=new int[8][8];
java.util.Random r=new java.util.Random();
while(true)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
board[i][j]=0;
}
}
for(k=0;k<5;k++)
{
if(k==0)
{
i=r.nextInt(8);
j=r.nextInt(8);
}
else
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==0)break;
}
if(j<8)break;
}
}
board[i][j]=Integer.MIN_VALUE;
for(m=0;m<8;m++)
{
board[i][m]++;
board[m][j]++;
}
for(m=i+1,n=j+1;m<8&&n<8;m++,n++)board[m][n]++;
for(m=i-1,n=i-1;m>=0&&n>=0;m--,n--)board[m][n]++;
for(m=i-1,n=j+1;m>=0&&n<8;m--,n++)board[m][n]++;
for(m=i+1,n=i-1;m<8&&n>=0;m++,n--)board[m][n]++;
}
boolean b=true;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]==0)b=false;
}
}
if(b)break;
}
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(board[i][j]<0)
{
System.out.println(""+i+","+j);
}
}
}
}
}
热心网友
时间:2024-06-13 16:10
伪码可不好写
热心网友
时间:2024-06-13 16:18
用什么语言啊?
热心网友
时间:2024-06-13 16:17
伪码可不好写呵呵