在网上看到了八皇后问题,用8*8应该这么做:
将八个点填入8x8的点阵中,要求每一行、每一列、每一条斜线(倾斜角度为45°或135°的方向)上最多只有一个点。将满足条件的情况显示在led点阵上
其中,我利用C语言已经求出了92种情况,并可以用矩阵输出
代码如下- #include <stdio.h>
- #include <stdlib.h>
- #define N 8
-
- int column[N+1];//同栏是否有皇后
- int rup[2*N +1];//右上至左下是否有皇后
- int lup[2*N +1];//左上至右下是否有皇后
- int queen[N+1] = {0};
- int num ;//解答编号
-
- void backtrack(int);//递回求解
-
- main(void)
- {
- int i;
- num = 0;
- for(i=1;i<=N;i++)
- column[i] = 1;
-
- for(i=1;i<=2*N;i++)
- rup[i] = lup[i] = 1;
-
- backtrack(1);
-
- system("pause");
- return 0;
- }
-
- void showAnswer()
- {
- int x,y;
- printf("
解答 %d
",++num);
- for (y=1;y<=N;y++)
- {
- for (x=1;x<=N;x++)
- {
- if(queen[y] == x)
- printf("1");
- else
- printf("0");
- }
- printf("
");
- }
- }
-
- void backtrack(int i)
- {
- int j;
- if(i > N)
- showAnswer();
- else
- for (j=1;j<=N;j++)
- {
- if(column[j] == 1 && rup[i+j] == 1 &&lup[i-j+N] == 1){
- queen[i] = j;
- //设定为占用
- column[j] = rup[i+j] = lup[i-j+N] = 0;
- backtrack(i+1);
- column[j] = rup[i+j] = lup[i-j+N] = 1; //在左下角递归完后进行下一个位置的递归运算
- }
- }
- }
复制代码请问怎么用
单片机来实现(我希望可以实现每种情况循环显示)?希望各位能给个思路,谢谢!
一周热门 更多>