首页 > 其他 > 详细

递归系列-----------八皇后解法

时间:2014-04-06 06:33:17      阅读:440      评论:0      收藏:0      [点我收藏+]

#include <stdio.h>


#define N 8


typedef struct _tag_Pos

{

   int ios;

   int jos;

} Pos;


static char board[N+2][N+2];

static Pos pos[] = { {-1, -1}, {-1, 0}, {-1, 1} };

static int count = 0;


void init()

{

   int i = 0;

   int j = 0;


   for(i=0; i<N+2; i++)

   {

       board[0][i] = ‘#‘;

       board[N+1][i] = ‘#‘;

       board[i][0] = ‘#‘;

       board[i][N+1] = ‘#‘;

   }


   for(i=1; i<=N; i++)

   {

       for(j=1; j<=N; j++)

       {

           board[i][j] = ‘ ‘;

       }

   }

}


void display()

{

   int i = 0;

   int j = 1;


   for(i=0; i<N+2; i++)

   {

       for(j=0; j<N+2; j++)

       {

           printf("%c", board[i][j]);

       }


       printf("\n");

   }

}


int check(int i, int j)

{

   int ret = 1;

   int p = 0;


   for(p=0; p<3; p++)

   {

       int ni = i;

       int nj = j;


       while( ret && (board[ni][nj] != ‘#‘) )

       {

           ni = ni + pos[p].ios;

           nj = nj + pos[p].jos;


           ret = ret && (board[ni][nj] != ‘*‘);

       }

   }


   return ret;

}


void find(int i)

{

   int j = 0;


   if( i > N )

   {

       count++;


       printf("Solution: %d\n", count);


       display();


       getchar();

   }

   else

   {

       for(j=1; j<=N; j++)

       {

           if( check(i, j) )

           {

               board[i][j] = ‘*‘;


               find(i+1);


               board[i][j] = ‘ ‘;

           }

       }

   }

}


int main()

{

   init();

   find(1);


   return 0;

}


本文出自 “Linux运维” 博客,请务必保留此出处http://2853725.blog.51cto.com/2843725/1390966

递归系列-----------八皇后解法,布布扣,bubuko.com

递归系列-----------八皇后解法

原文:http://2853725.blog.51cto.com/2843725/1390966

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!