|
|
下面是 代码
[php]#include<stdio.h>
char Chessboard[8][8];/*声明一个二维数组,作为棋盘*/
int E_q(int x,int y,int Queens)
{ int i,j; /*用于循环计数的变量*/
int Result=0;
if (Queens==8)
return 1;
else
if(QueenPlace(x,y))
{
Chessboard[x][y]='Q';
for (i=0;i<8;i++)
for (j=0;j<8;j++)
{
Result+=E_q(i,j,Queens+1);
if (Result>0)
break;
}
if (Result>0)
return 1;
else
{
Chessboard[x][y]='X';
return 0;
}
}
else
return 0;
}
/*判断是否可以放入皇后*/
int QueenPlace(int x,int y)
{
int i,j;
if (Chessboard[x][y]!='X')
return 0; /*判断本点是否有皇后*/
for (j=y-1;j>=0;j--)
if(Chessboard[x][j]!='X')
return 0; /*判断本点上面是否有皇后*/
for (j=y+1;j<=8;j++)
if(Chessboard[x][j]!='X')
return 0; /*判断本点下面是否有皇后*/
for (i=i-1;j>=0;i--)
if(Chessboard[y]!='X')
return 0; /*判断本点左边是否有皇后*/
for (i=i+1;i<=8;i++)
if(Chessboard[y]!='X')
return 0; /*判断本点右边是否有皇后*/
i=x-1;
j=y-1;
while (i>=0&&j>=0)
if (Chessboard[i--][j--]!='X')
return 0;
i=x+1;
j=y+1;
while (i<=8&&j<=8)
if (Chessboard[i++][j++]!='X')
return 0;
i=x-1;
j=y+1;
while (i>=0&&j<=8)
if (Chessboard[i--][j++]!='X')
return 0;
i=x+1;
j=y-1;
while (i<=8&&j>=0)
if (Chessboard[i++][j--]!='X')
return 0;
return 1;
}
void main()
{
int i,j;
for (i=0;i<8;i++)
for (j=0;j<8;j++)
Chessboard[j]='X';
E_q(0,0,0);
printf("the graph of 8 queens on the Chessboard.\n");
printf(" 0 1 2 3 4 5 6 7 \n");
printf(" +---+---+---+---+---+---+---+---+---+\n");
for (i=0;i<8;i++)
{
printf(" %d |",i);
for (j=0;j<8;j++)
printf("-%c-|",Chessboard[j]);
printf("\n +---+---+---+---+---+---+---+---+\n");
}
}
[/php]
感觉算法和程序都没什么问题,在C-FREE下全部打印X,而用gcc 提示说段错误,高手帮忙分析一下,谢谢了 |
|