在網(wǎng)上看到了八皇后問題,用8*8應(yīng)該這么做:
將八個點填入8x8的點陣中,要求每一行、每一列、每一條斜線(傾斜角度為45°或135°的方向)上最多只有一個點。將滿足條件的情況顯示在led點陣上
其中,我利用C語言已經(jīng)求出了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("\n 解答 %d\n",++num);
- for (y=1;y<=N;y++)
- {
- for (x=1;x<=N;x++)
- {
- if(queen[y] == x)
- printf("1");
- else
- printf("0");
- }
- printf("\n");
- }
- }
-
- 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;
- //設(shè)定為占用
- column[j] = rup[i+j] = lup[i-j+N] = 0;
- backtrack(i+1);
- column[j] = rup[i+j] = lup[i-j+N] = 1; //在左下角遞歸完后進(jìn)行下一個位置的遞歸運(yùn)算
- }
- }
- }
復(fù)制代碼
請問怎么用單片機(jī)來實現(xiàn)(我希望可以實現(xiàn)每種情況循環(huán)顯示)?希望各位能給個思路,謝謝!
|