算法之8皇后问题(C语言)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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 本文出自 51CTO.COM技术博客 |


rightsoft
博客统计信息
热门文章
最新评论
友情链接