欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
如何利用51單片機8*8矩陣解決八皇后問題?
[打印本頁]
作者:
Price1
時間:
2019-2-20 21:20
標題:
如何利用51單片機8*8矩陣解決八皇后問題?
在網(wǎng)上看到了八皇后問題,用8*8應該這么做:
將八個點填入
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;
//設定為占用
column[j] = rup[i+j] = lup[i-j+N] = 0;
backtrack(i+1);
column[j] = rup[i+j] = lup[i-j+N] = 1; //在左下角遞歸完后進行下一個位置的遞歸運算
}
}
}
復制代碼
請問怎么用
單片機
來實現(xiàn)(我希望可以實現(xiàn)每種情況循環(huán)顯示)?希望各位能給個思路,謝謝!
作者:
wulin
時間:
2019-2-21 10:38
樓主的八皇后游戲很古老,似乎趣味性不大。樓主想通過8x8的點陣LED顯示結果也不難,可以定義一個unsigned int 數(shù)組,把運算結果按序保存在數(shù)組中。再按序循環(huán)讀取數(shù)組的數(shù)據(jù)賦值于8x8點陣LED的驅動端口即可。
作者:
小貓貓愛吃魚
時間:
2019-2-21 12:08
單片機后續(xù)的關鍵是顯示;
1、確定8*8點陣屏幕和驅動;
2、連接好線路,點亮點陣屏;
3、把皇后的解法,分別顯示;
4、加入按鍵,控制上下選項。
作者:
HC6800-ES-V2.0
時間:
2019-2-21 14:21
才92種?非常非常多吧,N多年前,計算機奧賽小組的老師用老菜果機、匯編語言,算出了成千上萬種。那個老師把堆棧玩得非常好。當時如果用帶圖形(八個皇后圖形移動,看到一個個的結果)的BASIC語言算,要算幾天,匯編不帶圖形,要算一個多小時(機器歪)。關鍵在算法。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1