注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 获取当前页面路径,实现权..
 帮助

算法之8皇后问题(C语言)


2008-01-05 20:37:07
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://bluefish.blog.51cto.com/214870/58142
     老大的老大说算法很重要,于是就有了......
     有太长太长的时间没有写过代码了,手都生了!
#include "stdio.h"
#define MAX_X 8
#define MAX_Y 8
#define OBS   (MAX_X-1)
int P[MAX_X][MAX_Y];//Queen's point,true == has Queen,false == not has
int L[MAX_X*2-1];//MAX_X*2-1 is the number of Diagonal-L; L is the states of left Diagonal,
              //true == this left Diagonal not locked, false == this left Diagonal is locked
int R[MAX_Y*2-1];//MAX_Y*2-1 is the number of Diagonal-R; R is the states of right Diagonal,
            //true == this right Diagonal not locked, false == this right Diagonal is locked
int C[MAX_Y];//states of colums
             //false == this colum is locked; true == this colum is not locked
int nNumberOfFunctions = 0;
void PutNextOne(int nLine);
  
void PrintPoint()
{
 int i = 0;
 int j = 0;
 printf("Function %d is:\r\n",nNumberOfFunctions);
 
 for(i = 0; i < MAX_X; i++)
 {
  for(j = 0; j < MAX_Y; j++)
  {
   if(P[i][j] == 1)
   {
    printf("x = %d, y = %d\r\n",i,j);
   }
  }
 }
 printf("\r\n");
}
void PutNextOne(int nLine)
{
 int i = 0;
 if(nLine >= MAX_X)
 {
  nNumberOfFunctions++;
  PrintPoint();
  return ;
 }
 for(i = 0; i < MAX_Y; i++)
 {
  if((C[i] == 1) && (L[nLine+i] == 1) && (R[nLine-i+OBS] == 1))
  {
   C[i] = 0;
   L[nLine+i] = 0;
   R[nLine-i+OBS] = 0;
   P[nLine][i] = 1;
   
   PutNextOne(nLine+1);
   C[i]= 1;
   L[nLine+i] = 1;
   R[nLine-i+OBS] = 1;
   P[nLine][i] = 0;
  }
 }
 return;
}

void main()
{
 int i = 0;
 int j = 0;
 for(i = 0; i < MAX_Y; i++)
 {
  C[i] = 1;
 }
 for(i = 0; i < MAX_X*2-1; i++)
 {
  L[i] = 1;
 }
 for(i = 0; i < MAX_Y*2-1; i++)
 {
  R[i] = 1;
 }
 for(i = 0; i < MAX_X; i++)
 {
  for(j = 0; j < MAX_Y; j++)
  {
   P[i][j] = 0;
  }
 }
 PutNextOne(0);
}
   

本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/58142





    文章评论
 
2008-01-06 13:22:21
8皇后问题很是经典啊

2008-04-23 06:34:19
给一个python的解:
def queens (row, col):
  return [[]] if col == 0 \
   else [[ran] + rst \ # 在 Python 中,g(x,y)=[x]+y
   for ran in range(row) \
   for rst in queens(row, col - 1) \
   if safe(ran, rst)]

搞定!

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: