八皇后详解,有人可能看不懂上一篇帖子,我又特别整理了一下,尽量弄得简单易懂。注释很详细,基本上都有注释。 先贴一张图,看图看程序比较容易 
贴上详细代码 - #include
- #define ROW 8//代表列,坐标是x
- #define COL 8//代表行,坐标是y
- #define NUM 7//八皇后问题,数组下标0-7
-
- #define TRUE 0//真
- #define FALSE 1//假
-
- #define YES 1//有皇后
- #define NO 0//没有皇后
-
- #define NO_BACK 0//表示不需要回溯
- #define BACK 1//表示需要回溯
-
-
- int a[ROW][COL];
- int k=0;
-
-
- int queens(int n)
- {
- int i, j;
-
- if(n>NUM)
- {
- printf("----------%06d----------\n",++k);
- for(i=0;i
|
- {
- for(j=0;j
- printf("%s",a[i][j]==1?"○":"●");
- printf("\n");
- }
- printf("--------------------------\n\n");
- return BACK;
- }
-
- for(j=0;j
- {
- int flag=TRUE;
-
- for(i=0;i
- {
-
- if(a[i][j]==YES||((i+j-n)>=0&&a[i][i+j-n]==YES)||((j+n-i
- {
- flag=FALSE;
- break;
- }
- }
- if(flag==TRUE)
- {
- a[n][j]=YES;
- if(queens(n+1)==BACK)
- {
- a[n][j]=NO;
- }else{
- return NO_BACK;
- }
- }
- }
-
- return BACK;
-
- }
- int main(void)
- {
- queens(0);
- return 0;
- }
|