八皇后问题
Posted ghost-98210
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八皇后问题相关的知识,希望对你有一定的参考价值。
八皇后问题:
在8x8格的国际象棋上摆放八个皇后,使其不能够相互攻击,即任意两个皇后都不能处于同一行,同一列或者同一条斜线上。
问有多少种摆法?
C语言代码:
1 //八皇后问题 2 //在8x8格的国际象棋上摆放八个皇后,使其不能够相互攻击,即任意 3 //两个皇后都不能处于同一行,同一列或者同一条斜线上。 4 //问有多少种摆法 5 #include <stdio.h> 6 7 int count = 0; 8 9 void EightQueen(int row,int n,int (*chess)[8]); 10 int nodanger(int row,int j,int (*chess)[8]); 11 12 int main() 13 { 14 int chess[8][8],j,i; 15 for(i = 0;i < 8;i++) 16 { 17 for(j = 0;j < 8;j++) 18 { 19 chess[i][j] = 0; 20 } 21 } 22 EightQueen(0,8,chess); 23 printf("共有%d种方法 ",count); 24 return 0; 25 } 26 void EightQueen(int row,int n,int (*chess)[8]) 27 { 28 int chess2[8][8],i,j; 29 for(i = 0;i < 8;i++) 30 { 31 for(j = 0;j < 8;j++) 32 { 33 chess2[i][j] = chess[i][j]; 34 } 35 } 36 if(8 == row) 37 { 38 printf("这是第%d种方法 ",count); 39 for(i = 0;i < 8;i++) 40 { 41 for(j = 0;j < 8;j++) 42 { 43 printf("%d ",*(*(chess2+i)+j)); 44 } 45 printf(" "); 46 } 47 count++; 48 } 49 else 50 { 51 for(j=0;j < n;j++) 52 { 53 if(nodanger(row,j,chess)) 54 { 55 for(i=0;i<8;i++) 56 { 57 *(*(chess2+row)+i) = 0; 58 } 59 *(*(chess2+row)+j) = 1; 60 EightQueen(row+1,n,chess2); 61 } 62 } 63 } 64 } 65 66 int nodanger(int row,int j,int (*chess)[8]) 67 { 68 int i,k,flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0,flag5 = 0; 69 //判断同一行是否危险 70 for(i=0;i<8;i++) 71 { 72 if(*(*(chess+i)+j) != 0) 73 { 74 flag1 = 1; 75 break; 76 } 77 } 78 //判断左上方 79 for(i=row,k=j;i>=0 && k>=0;i--,k--) 80 { 81 if(*(*(chess+i)+k) != 0) 82 { 83 flag2 = 1; 84 break; 85 } 86 } 87 //判断右下方 88 for(i=row,k=j;i<8 && k<8;i++,k++) 89 { 90 if(*(*(chess+i)+k) != 0) 91 { 92 flag3 = 1; 93 break; 94 } 95 } 96 //判断右上方 97 for(i=row,k=j;i>=0 && k<8;i--,k++) 98 { 99 if(*(*(chess+i)+k) != 0) 100 { 101 flag4 = 1; 102 break; 103 } 104 } 105 for(i=row,k=j;i<8 && k>=0;i++,k--) 106 { 107 if(*(*(chess+i)+k) != 0) 108 { 109 flag5 = 1; 110 break; 111 } 112 } 113 if(flag1 || flag2 || flag3 || flag4 || flag5) 114 { 115 return 0; 116 } 117 else 118 { 119 return 1; 120 } 121 }
输出结果如下:
以上是关于八皇后问题的主要内容,如果未能解决你的问题,请参考以下文章