亚洲AV日韩AⅤ综合手机在线观看,激情婷婷久久综合色,欧美色五月婷婷久久,久久国产精品99久久人人澡

  • <abbr id="uk6uq"><abbr id="uk6uq"></abbr></abbr>
  • <tbody id="uk6uq"></tbody>
  • 程序員遞歸面試問(wèn)題及解析

    時(shí)間:2020-11-07 17:42:50 面試問(wèn)題 我要投稿

    程序員遞歸面試問(wèn)題及解析

    面試?yán)} 2:八皇后問(wèn)題是一個(gè)古老而著名的`問(wèn)題,是回溯算法的典型例題。該問(wèn)題是 19 世紀(jì)著名的數(shù)學(xué)家高斯 1850 年提出:在 8×8 格的國(guó)際象棋盤(pán)上擺放 8 個(gè)皇后,使其不能互相攻擊,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,問(wèn)有多少種擺法。[英國(guó)某著名計(jì)算機(jī)圖形圖像公司面試題]
    解析:遞歸實(shí)現(xiàn) n 皇后問(wèn)題。
    算法分析:
    數(shù)組 a、b、c 分別用來(lái)標(biāo)記沖突,a 數(shù)組代表列沖突,從 a[0]~a[7]代表第 0 列到第 7 列。如果某列上已經(jīng)有皇后,則為 1,否則為 0。
    數(shù)組 b 代表主對(duì)角線沖突,為 b[i-j+7],即從 b[0]~b[14]。如果某條主對(duì)角線上已經(jīng)有皇后,則為 1,否則為 0。
    數(shù)組 c 代表從對(duì)角線沖突,為 c[i+j],即從 c[0]~c[14]。如果某條從對(duì)角線上已經(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; //記錄總的棋盤(pán)狀態(tài)數(shù)
    void qu(int i);
    //參數(shù)i 代表行
    int main()
    {
    int iLine,iColumn;
    //棋盤(pán)初始化,空格為*,放置皇后的地方為@
    for(iLine=0;iLine<8;iLine++)
    {
    a[iLine]=0; //列標(biāo)記初始化,表示無(wú)列沖突
    for(iColumn=0;iColumn<8;iColumn++)
    Queen[iLine][iColumn]='*';
    }
    //主、從對(duì)角線標(biāo)記初始化,表示沒(méi)有沖突
    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)
    //如果無(wú)沖突
    {
    Queen[i][iColumn]='@';
    //放皇后
    a[iColumn]=1;
    //標(biāo)記,下一次該列上不能放皇后
    b[i-iColumn+7]=1;
    //標(biāo)記,下一次該主對(duì)角線上不能放皇后
    c[i+iColumn]=1;
    //標(biāo)記,下一次該從對(duì)角線上不能放皇后
    if(i<7) qu(i+1);
    //如果行還沒(méi)有遍歷完,進(jìn)入下一行
    else //否則輸出
    {
    //輸出棋盤(pán)狀態(tài)
    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");
    }
    //如果前次的皇后放置導(dǎo)致后面的放置無(wú)論如何都不能滿足要求,則回溯,重置
    Queen[i][iColumn]='*';
    a[iColumn]=0;
    b[i-iColumn+7]=0;
    c[i+iColumn]=0;
    }
    }
    }

    【程序員遞歸面試問(wèn)題及解析】相關(guān)文章:

    程序員面試問(wèn)題及答案10-08

    面試常見(jiàn)問(wèn)題及回答技巧解析12-15

    常見(jiàn)的面試問(wèn)題及答案解析11-06

    MBA提前批面試高頻問(wèn)題及思路解析09-04

    英語(yǔ)面試問(wèn)題大解析及情景對(duì)話09-13

    程序員面試常見(jiàn)問(wèn)題12-09

    it程序員面試常見(jiàn)問(wèn)題10-16

    關(guān)于機(jī)械類專業(yè)面試常見(jiàn)問(wèn)題及解析面試11-05

    銀行招聘考試面試問(wèn)題匯總及思路解析12-12

    經(jīng)典面試問(wèn)題解析01-02