C语言递归解决八皇后问题

Python019

C语言递归解决八皇后问题,第1张

#include<stdio.h>

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

}

到底是哪些奇葩老师布置的作业?