描寫(xiě)語(yǔ)文考試的作文
面試例題 2:八皇后問(wèn)題是一個(gè)古老而著(zhù)名的問(wèn)題,是回溯算法的典型例題。該問(wèn)題是 19 世紀著(zhù)名的數學(xué)家高斯 1850 年提出:在 8×8 格的國際象棋盤(pán)上擺放 8 個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線(xiàn)上,問(wèn)有多少種擺法。[英國某著(zhù)名計算機圖形圖像公司面試題]解析:遞歸實(shí)現 n 皇后問(wèn)題。
算法分析:
數組 a、b、c 分別用來(lái)標記沖突,a 數組代表列沖突,從 a[0]~a[7]代表第 0 列到第 7 列。如果某列上已經(jīng)有皇后,則為 1,否則為 0。
數組 b 代表主對角線(xiàn)沖突,為 b[i-j+7],即從 b[0]~b[14]。如果某條主對角線(xiàn)上已經(jīng)有皇后,則為 1,否則為 0。
數組 c 代表從對角線(xiàn)沖突,為 c[i+j],即從 c[0]~c[14]。如果某條從對角線(xiàn)上已經(jīng)有皇后,則為 1,否則為 0。
代碼如下:
#include <stdio.h>
static char Queen[8][8];
static int a[8];
static int b[15];
static int c[15];
static int iQueenNum=0; /pic/> void qu(int i);
/pic/> int main()
{
int iLine,iColumn;
/pic/> for(iLine=0;iLine<8;iLine++)
{
a[iLine]=0; /pic/> for(iColumn=0;iColumn<8;iColumn++)
Queen[iLine][iColumn]='*';
}
/pic/> for(iLine=0;iLine<15;iLine++)
b[iLine]=c[iLine]=0;
qu(0);
return 0;
}
void qu(int i)
{
int iColumn;
for(iColumn=0;iColumn<8;iColumn++)
{
if(a[iColumn]==0&&b[i-iColumn+7]==0&&c[i+iColumn]==0)
/pic/> {
Queen[i][iColumn]='@';
/pic/> a[iColumn]=1;
/pic/> b[i-iColumn+7]=1;
/pic/> c[i+iColumn]=1;
/pic/> if(i<7) qu(i+1);
/pic/> else /pic/> {
/pic/> int iLine,iColumn;
printf("第%d 種狀態(tài)為:\n",++iQueenNum);
for(iLine=0;iLine<8;iLine++)
{
for(iColumn=0;iColumn<8;iColumn++)
printf("%c ",Queen[iLine][iColumn]);
printf("\n");
}
printf("\n\n");
}
/pic/> Queen[i][iColumn]='*';
a[iColumn]=0;
b[i-iColumn+7]=0;
c[i+iColumn]=0;
}
}
}
【描寫(xiě)語(yǔ)文考試的作文】相關(guān)文章:
描寫(xiě)考試的作文03-20
語(yǔ)文考試反思作文01-31
語(yǔ)文考試作文03-04
語(yǔ)文考試感想作文10-07
語(yǔ)文考試后的反思作文12-11
期中語(yǔ)文考試反思作文12-13
【集合】語(yǔ)文考試作文01-14
小學(xué)語(yǔ)文考試反思作文12-11
(推薦)語(yǔ)文考試作文08-08
描寫(xiě)語(yǔ)文老師的作文03-05
- 相關(guān)推薦