文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>八皇后问题 递归实现

八皇后问题 递归实现

时间:2010-06-02  来源:随1意2o

#include <stdio.h>
#include <stdlib.h>
void showQueen(int (*classBound)[8]);   //点的输出
int isvaluse(int (*classBound)[8],const int row,const int col);  // 点的比较,row为行,col为列 void EightQueen(int (*classBound)[8],int row);   int main(void)
{
 int classBound[8][8] = {0};
 EightQueen(classBound,0);  printf("运行结果存入到了G盘的test.txt文件中\n");
 return 0;
}
/*void showQueen(int (*classBound)[8])
{
 int i,j;
    static int cnt = 1;
 printf("\n this is %d probable\n",cnt++);
  for(i = 0;i < 8;i++)
  {
   for(j = 0;j < 8; j++)
    printf("%4d",classBound[i][j]);
   printf("\n");
  }
}*/
void showQueen(int (*classBound)[8])
{
 FILE *fp;
 int i,j;
    static int cnt = 1;
 fp = fopen("G:\\test.txt","at");
 if(fp == NULL)
 {
  printf("\n 文件打开失败 \n");
  exit(0);
 }
 fprintf(fp,"\n this is %d probable\n",cnt++);
  for( i = 0 ; i < 8 ; i++)
  {
   for(j = 0 ;j < 8 ; j++)
    fprintf(fp,"%4d",classBound[i][j]);
   fprintf(fp,"\n");
  }
}
int isvaluse(int (*classBound)[8],const int row,const int col)
{
 int i,j,OK = 1;
 for(i = row - 1; OK == 1 && i >= 0 ; i--) //判断该皇后之前的同一列上是否有皇后
  {
    OK = !classBound[i][col];
  }
    for(i = row-1,j = col-1; OK == 1 && i >= 0 && j >= 0; i--,j--)  //判断斜率为-1的斜线上是否有皇后
  {
    OK = !classBound[i][j];
  }
 for(i = row-1,j = col + 1;OK == 1 && i >= 0 && j < 8; i--,j++) //判断斜率为1的斜线上是否有皇后
  {
    OK = !classBound[i][j];
  }
 return OK;
}
void EightQueen(int (*classBound)[8],int row)
{
 int j;
 if(row < 8)
 {
  for(j = 0; j < 8; j++)
  {
   if(isvaluse(classBound,row,j))
   {
    classBound[row][j] = 1;
    EightQueen(classBound, row + 1);     classBound[row][j] = 0;    //将本位置不放皇后,以便测试下一位置
   }  //从那个递归函数进去之后,处理完之后,返回你进入时的那个点,为下一步的测试作准备时就把那个点置0
  }
 }
 else
 {
  showQueen(classBound);
 }
}
       
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载