int EightQueen(int row,int col,int (*chess)[8])
int notdanger(int row,int col,int (*chess)[8])//函数声明要放在主函数外
int sum=0
int main ()
{
int chess[8][8],i,j
for (i=0i<8i++)
{
for(j=0j<8j++)
chess[i][j]=0
}
EightQueen(0,8,chess)
printf("一共有 %d 种方案\n",sum)
return 0
}
int EightQueen(int row,int col,int (*chess)[8])
{
int chess2[8][8],i,j
for (i=0i<8i++)
{
for(j=0j<8j++)
{chess2[i][j]=chess[i][j]}
}
if (row==8)
{
printf ("第 %d 种解法",sum+1) //逗号为中文输入逗号
for (i=0i<8i++)
{
for (j=0j<8j++)
printf("%d",(*(*chess2+i)+j))//括号不匹配
printf("\n")
}
printf("\n")
sum++
}
else
for (j=0j<8j++)
{
if (notdanger(row,j,chess))
{
for(i=0i<8i++)
{
*(*(chess2+row)+i)=0//raw没有定义,你是想用row吧?
*(*(chess2+row)+j)=1//raw没有定义,你是想用row吧?
}
EightQueen(row+1,col,chess2)
}
}
return 0
}
int notdanger (int row,int j,int (*chess)[8])
{
int i,k,flag1=0,flag2=0,flag3=0
/*判断列方向*/
for (i=0i<8i++)
{
if (*(*chess+i)+j)!=0)
{
flag1=1
break
}
}
/*判断左上方*/
for (i=row,k=ji>=0&&k>=0i--,k--)//逗号为中文逗号
{
if (*(*chess+i)+k)!=0)
{
flag2=1
break
}
}
/*判断右上方*/
for(i=row,k=ji>=0 && k<8i--,k++) //逗号为中文逗号
{
if (*(*chess2+i)+k)!=0)//括号比匹配
{
flag3=1
break
}
}
if (flag1||flag2||flag3)
{
return 0
}
else
{
return 1
}
}
评注:没有改完,你主要的地方在于中文逗号,花括号“{}”不匹配,“()”括号不匹配,变量raw没有定义,都是些低级错误,自己把代码的格式调整好,然后再试试。
#include <math.h>#include <stdio.h>
#define MAX 8 /* 棋子数及棋盘大小MAXxMAX */
int board[MAX]
/* 印出结果 */
void show_result()
{
int i
for(i=0i<MAXi++)
printf("(%d,%d)",i,board[i])
printf("\n")
}
/* 检查是否在同一直横斜线上有其它棋子 */
int check_cross(int n)
{
int i
for(i=0i<ni++){
if(board[i]==board[n] || (n-i)==abs(board[i]-board[n]))return 1
}
return 0
}
/* 放棋子到棋盘上 */
void put_chess(int n)
{
int i
for(i=0i<MAXi++){
board[n]=i
if(!check_cross(n)){
if(n==MAX-1) show_result()/* 找到其中一种放法了...印出结果 */
else put_chess(n+1)
}
}
}
void main()
{
clrscr()
puts("The possible placements are:")
put_chess(0)
puts("\n Press any key to quit...")
getch()
return
}
到底是哪些奇葩老师布置的作业?