信用卡欠款20000立案:8皇后的衍生问题

来源:百度文库 编辑:高校问答 时间:2024/04/29 21:02:48
8*8的格子,
只有5个皇后,
要求不能互吃但要把每个格子都管到(一个格子可以由多个皇后管),
用伪码写。。。。。。
写的好的再加100
我连八皇后都搞不清啊!!!
帮个忙写下喽,
我加分了

C
今天晚上没人弄出来就算了
我明天就考试了

下面的代码运行速度很快,结束时会给出一个答案,打出每个“皇后”放置位置的坐标(注意,最左上角的坐标是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);
}
}
}
}
}

用8皇后的非递归解法,每当放满5个皇后时检查一下代表各行、列、斜的几个数组有没有可以放皇后的不就行了么?

用什么语言啊?

伪码可不好写呵呵

**选择一个方案,使用五个皇后就可以控制一个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);
}
}
}
}
}

伪码可不好写