色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

回溯算法經(jīng)典題目之N皇后

算法與數(shù)據(jù)結(jié)構(gòu) ? 來(lái)源:吳師兄學(xué)算法 ? 作者:算法與數(shù)據(jù)結(jié)構(gòu) ? 2022-09-21 15:10 ? 次閱讀
提到回溯算法那肯定離不開 n 皇后這道算法題,它實(shí)在是太經(jīng)典了。

所謂n 皇后問(wèn)題,指的是如何將n個(gè)皇后放置在n×n的棋盤上,并且使皇后彼此之間不能相互攻擊。

皇后彼此不能相互攻擊,也就是說(shuō):任何兩個(gè)皇后都不能處于同一條橫行、縱行或斜線上

給你一個(gè)整數(shù)n,返回所有不同的n 皇后問(wèn)題的解決方案。

每一種解法包含一個(gè)不同的n 皇后問(wèn)題的棋子放置方案,該方案中'Q''.'分別代表了皇后和空位。

輸入:n = 4
輸出:[[".Q..","...Q","Q...","..Q."],
["..Q.","Q...","...Q",".Q.."]]
解釋:4 皇后問(wèn)題存在兩個(gè)不同的解法。

我覺(jué)得你應(yīng)該能夠結(jié)合視頻動(dòng)畫和保姆級(jí)別的代碼注釋把這道題目弄清楚。

classSolution{

//保存所有符合要求的解
List>res=newArrayList<>();

publicList>solveNQueens(intn){

//attack用來(lái)表示皇后的攻擊范圍
int[][]attack=newint[n][n];
//queen用來(lái)記錄皇后的位置
char[][]queen=newchar[n][n];

//初始化二維數(shù)組queen中所有的元素為'.'
for(char[]c:queen){
Arrays.fill(c,'.');
}

//初始化二維數(shù)組attack中所有的元素為0
//0代表沒(méi)有皇后能攻擊得到
//1代表出于任意一個(gè)皇后的攻擊范圍內(nèi)
for(int[]c:attack){
Arrays.fill(c,0);
}

//從棋盤的第0行第0列處理n皇后的情況
backtrack(0,n,queen,attack);

//最后,返回所有符合要求的解
returnres;
}

//很顯然,每一行只能放置一個(gè)皇后,所以我們每一行每一行的來(lái)放置皇后
//k表示當(dāng)前處理的行
//n表示需要放置多少個(gè)皇后,同時(shí)也代表棋盤的大小為n*n
//queen用來(lái)記錄皇后的位置
//attack用來(lái)表示皇后的攻擊范圍
privatevoidbacktrack(intk,intn,char[][]queen,int[][]attack){

//如果發(fā)現(xiàn)在棋盤的最后一行放置好了皇后,那么就說(shuō)明找到了一組符合要求的解
if(k==n){
//由于queen為二維字符數(shù)組,所以需要轉(zhuǎn)換為字符串?dāng)?shù)組
Listlist=newArrayList<>();
//遍歷二維數(shù)組queen
//取出queen的每一行字符數(shù)組c
for(char[]c:queen){
//把字符數(shù)組c中的所有字符轉(zhuǎn)換為字符串的形式進(jìn)行拼湊
//比如['.','Q','.','.',]
//轉(zhuǎn)換為'.Q..'
//把這個(gè)字符串加入到list中
list.add(String.copyValueOf(c));
}

//list即為一組符合要求的解,把它加入到結(jié)果數(shù)組中
res.add(list);
//由于遍歷完了所有的行,無(wú)需再遍歷下去,所以返回
return;
}

//每一行只能放置一個(gè)皇后
//并且每一列也只能放置一個(gè)皇后
//所以在k行中,從0列到n-1列,判斷皇后應(yīng)該放置到哪個(gè)位置
for(inti=0;i//如果發(fā)現(xiàn)attack[k][i]==0
//說(shuō)明這個(gè)位置不在任何一個(gè)皇后的攻擊范圍內(nèi)
//所以可以考慮放置皇后
if(attack[k][i]==0){

//如果在(k,i)位置放置了皇后,那么就需要考慮在k+1行應(yīng)該怎么放置其它的皇后了
//由于有可能在(k,i)位置放置了皇后之后,在后續(xù)的其它行會(huì)無(wú)法再放置其它的皇后
//那么就需要回到(k,i)的狀態(tài),考慮能不能在(k,i+1)的位置放置
//為了能夠回到(k,i)的狀態(tài),所以需要先記錄此時(shí)的attack
//使用一個(gè)臨時(shí)的二維數(shù)組,深度拷貝attack
//如果不使用深度拷貝,而是直接使用int[][]temp=c
//會(huì)導(dǎo)致attack發(fā)生改變是temp也會(huì)發(fā)生改變
//這樣也就無(wú)法保存之前的狀態(tài)了
int[][]temp=newint[n][n];

//通過(guò)兩個(gè)for循環(huán),把a(bǔ)ttack中的所有元素深度拷貝到temp
for(intl=0;lfor(intm=0;m//queen用來(lái)記錄皇后的位置
//那么(k,i)的位置queen[k][i]='Q'
queen[k][i]='Q';

//由于新放置了一個(gè)皇后,所以攻擊范圍又更多了
//所以需要更新attack數(shù)組
//新放置皇后的坐標(biāo)為(k,i),同樣的需要更新它的八個(gè)方向
checkQueenAttack(k,i,attack);

//如果在(k,i)位置放置了皇后,那么就需要考慮在k+1行應(yīng)該怎么放置其它的皇后
//遞歸的調(diào)用backtrack在k+1行放置皇后
backtrack(k+1,n,queen,attack);

//遞歸結(jié)束后,拿走皇后,恢復(fù)attack的狀態(tài),考慮能不能在(k,i+1)的位置放置
attack=temp;

//恢復(fù)queen的狀態(tài),說(shuō)明此時(shí)皇后不放置在(k,i)位置
queen[k][i]='.';
}
}


}

//坐標(biāo)(x,y)為皇后所處的位置
//更新attack
privatevoidcheckQueenAttack(intx,inty,int[][]attack){

//對(duì)于每一個(gè)坐標(biāo)(x,y)來(lái)說(shuō),都有上、下、左、右、左上、左下、右上、右下八個(gè)方向
//【左上】的坐標(biāo)為(x-1,y-1)
//【上】的坐標(biāo)為(x-1,y)
//【右上】的坐標(biāo)為(x+1,y+1)
//【左】的坐標(biāo)為(x,y+1)
//【右】的坐標(biāo)為(x,y-1)
//【左下】的坐標(biāo)為(x+1,y-1)
//【下】的坐標(biāo)為(x+1,y)
//【右下】的坐標(biāo)為(x+1,y+1)
//通過(guò)兩個(gè)一維數(shù)組可以表示這八個(gè)方向
//dx表示x的方向
intdx[]={-1,-1,-1,0,0,1,1,1};
//dy表示y的方向
intdy[]={-1,0,1,-1,1,-1,0,1};

//皇后所處的坐標(biāo)肯定是皇后能攻擊的位置,設(shè)置為1
attack[x][y]=1;

//以坐標(biāo)(x,y)為中心,去更新它八個(gè)方向的坐標(biāo)
for(intj=0;j8;j++){
//由內(nèi)向外的進(jìn)行更新
for(inti=1;i//新的位置的坐標(biāo)行為x+i*dx[j]
intnx=x+i*dx[j];
//新的位置的坐標(biāo)列為y+i*dy[j]
intny=y+i*dy[j];

//如果新位置的坐標(biāo)在n*n的棋盤范圍內(nèi)
if(nx>=0&&nx=0&&ny//那么這些位置就是在坐標(biāo)為(x,y)的皇后的攻擊范圍內(nèi),更新為1
attack[nx][ny]=1;
}

}
}
}
}

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4793

    瀏覽量

    68701
  • 回溯算法
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    6620

原文標(biāo)題:回溯算法經(jīng)典題目之 N 皇后

文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高薪 mcu 觸控算法專家(觸控按鍵,不要觸控屏)

    觸摸原理,具有觸摸算法/硬件的成功設(shè)計(jì)開發(fā)和調(diào)測(cè)經(jīng)驗(yàn)(至少熟練掌握電容觸摸原理); 5、精通觸摸相關(guān)安規(guī)認(rèn)證的測(cè)試規(guī)范; 6、具有觸摸算法大量產(chǎn)應(yīng)用經(jīng)驗(yàn),面向家電應(yīng)用觸控算法經(jīng)驗(yàn)優(yōu)先; 7、具備一定的團(tuán)隊(duì)管理能力。
    發(fā)表于 12-27 14:12

    恩智浦 MCX N系列電源管理(MCX N94/54與MCX N23)

    給大家揭秘MCX N系列在電源管理方面的卓越性能。電源管理對(duì)于硬件設(shè)計(jì)的優(yōu)化以及低功耗應(yīng)用的實(shí)現(xiàn)至關(guān)重要,因此,深入了解MCX N系列的電源管理機(jī)制對(duì)于開發(fā)者而言意義非凡。同時(shí)小編也列舉了一些硬件設(shè)計(jì)時(shí)的注意事項(xiàng),本篇文章適用于MCX
    的頭像 發(fā)表于 12-05 09:49 ?794次閱讀
    恩智浦 MCX <b class='flag-5'>N</b>系列<b class='flag-5'>之</b>電源管理(MCX <b class='flag-5'>N</b>94/54與MCX <b class='flag-5'>N</b>23)

    經(jīng)典圖神經(jīng)網(wǎng)絡(luò)(GNNs)的基準(zhǔn)分析研究

    本文簡(jiǎn)要介紹了經(jīng)典圖神經(jīng)網(wǎng)絡(luò)(GNNs)的基準(zhǔn)分析研究,發(fā)表在 NeurIPS 2024。 文章回顧了經(jīng)典 GNNs 模型在節(jié)點(diǎn)分類任務(wù)上的表現(xiàn),結(jié)果發(fā)現(xiàn)過(guò)去 SOTA 圖學(xué)習(xí)模型報(bào)告的性能優(yōu)越
    的頭像 發(fā)表于 11-27 09:16 ?194次閱讀
    <b class='flag-5'>經(jīng)典</b>圖神經(jīng)網(wǎng)絡(luò)(GNNs)的基準(zhǔn)分析研究

    激光雷達(dá)在SLAM算法中的應(yīng)用綜述

    SLAM算法運(yùn)行的重要傳感器。基于激光雷達(dá)的SLAM算法,對(duì)激光雷達(dá)SLAM總體框架進(jìn)行介紹,詳細(xì)闡述前端里程計(jì)、后端優(yōu)化、回環(huán)檢測(cè)、地圖構(gòu)建模塊的作用并總結(jié)所使用的算法;按由2D到 3D,單傳感器到多傳感器融合的順序,對(duì)
    的頭像 發(fā)表于 11-12 10:30 ?732次閱讀
    激光雷達(dá)在SLAM<b class='flag-5'>算法</b>中的應(yīng)用綜述

    dp接口的最新技術(shù)發(fā)展

    深度優(yōu)先搜索(DFS)是一種基本的算法,用于遍歷或搜索樹或圖。它從一個(gè)頂點(diǎn)開始,盡可能深地搜索樹的分支。當(dāng)搜索到最深節(jié)點(diǎn)時(shí),然后回溯。DFS可以用于解決許多問(wèn)題,如尋找路徑、檢測(cè)循環(huán)、拓?fù)渑判虻?/div>
    的頭像 發(fā)表于 10-30 13:52 ?183次閱讀

    時(shí)間復(fù)雜度為 O(n^2) 的排序算法

    作者:京東保險(xiǎn) 王奕龍 對(duì)于小規(guī)模數(shù)據(jù),我們可以選用時(shí)間復(fù)雜度為 O(n2) 的排序算法。因?yàn)闀r(shí)間復(fù)雜度并不代表實(shí)際代碼的執(zhí)行時(shí)間,它省去了低階、系數(shù)和常數(shù),僅代表的增長(zhǎng)趨勢(shì),所以在小規(guī)模數(shù)據(jù)情況下
    的頭像 發(fā)表于 10-19 16:31 ?1177次閱讀
    時(shí)間復(fù)雜度為 O(<b class='flag-5'>n</b>^2) 的排序<b class='flag-5'>算法</b>

    RVBacktrace RISC-V極簡(jiǎn)棧回溯組件

    RVBacktrace組件簡(jiǎn)介一個(gè)極簡(jiǎn)的RISC-V棧回溯組件。功能在需要的地方調(diào)用組件提供的唯一API,開始當(dāng)前環(huán)境的棧回溯支持輸出addr2line需要的命令,使用addr2line進(jìn)行棧回溯支持結(jié)合反匯編,棧
    的頭像 發(fā)表于 09-15 08:12 ?406次閱讀
    RVBacktrace RISC-V極簡(jiǎn)棧<b class='flag-5'>回溯</b>組件

    回溯英特爾在跨越半個(gè)世紀(jì)的發(fā)展歷程

    我們以英特爾三位風(fēng)云人物的三句名言為線索,回溯英特爾在跨越半個(gè)世紀(jì)的發(fā)展歷程中,如何利用芯片技術(shù)的力量,影響信息時(shí)代,開啟未來(lái)之門。
    的頭像 發(fā)表于 08-16 14:58 ?634次閱讀

    機(jī)器學(xué)習(xí)的經(jīng)典算法與應(yīng)用

    關(guān)于數(shù)據(jù)機(jī)器學(xué)習(xí)就是喂入算法和數(shù)據(jù),讓算法從數(shù)據(jù)中尋找一種相應(yīng)的關(guān)系。Iris鳶尾花數(shù)據(jù)集是一個(gè)經(jīng)典數(shù)據(jù)集,在統(tǒng)計(jì)學(xué)習(xí)和機(jī)器學(xué)習(xí)領(lǐng)域都經(jīng)常被用作示例。數(shù)據(jù)集內(nèi)包含3類共150條記錄,每類各50個(gè)數(shù)
    的頭像 發(fā)表于 06-27 08:27 ?1675次閱讀
    機(jī)器學(xué)習(xí)的<b class='flag-5'>經(jīng)典</b><b class='flag-5'>算法</b>與應(yīng)用

    什么是經(jīng)典藍(lán)牙模塊?

    ? 什么是經(jīng)典藍(lán)牙模塊? 前面我們已經(jīng)就藍(lán)牙模塊的概念做了了解,隨著時(shí)間的推移,產(chǎn)品越來(lái)越智能,需要的藍(lán)牙模塊也就越來(lái)越廣泛,本篇文章我們就一起了解下什么是經(jīng)典藍(lán)牙模塊。 經(jīng)典藍(lán)牙模塊(BT)泛指
    的頭像 發(fā)表于 05-24 14:52 ?536次閱讀
    什么是<b class='flag-5'>經(jīng)典</b>藍(lán)牙模塊?

    藍(lán)牙模塊選經(jīng)典藍(lán)牙還是低功耗藍(lán)牙?

    ? 經(jīng)典藍(lán)牙(classic Bluetooth)和低功耗藍(lán)牙(Bluetooth low energy,簡(jiǎn)稱BLE或者LE),兩者有什么區(qū)別?為什么他們都叫“藍(lán)牙”?Bluetooth low
    的頭像 發(fā)表于 05-23 17:57 ?1296次閱讀
    藍(lán)牙模塊選<b class='flag-5'>經(jīng)典</b>藍(lán)牙還是低功耗藍(lán)牙?

    求助,關(guān)于STM32上開發(fā)函數(shù)調(diào)用堆棧回溯的問(wèn)題求解

    1、stm32f1系列 2、上了FreeRTOS 3、想開發(fā)函數(shù)調(diào)用回溯功能 在編譯選項(xiàng)中增加了--use_frame_pointer,編程一個(gè)正常的程序(之前一直run的),測(cè)試發(fā)現(xiàn),程序啟動(dòng)即crash,請(qǐng)問(wèn)有沒(méi)有高手之前遇到過(guò)?
    發(fā)表于 05-10 07:32

    C語(yǔ)言實(shí)現(xiàn)經(jīng)典排序算法概覽

    冒泡排序(英語(yǔ):Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序(如從大到小、首字母從A到Z)錯(cuò)誤就把他們交換過(guò)來(lái)。
    的頭像 發(fā)表于 02-25 12:27 ?459次閱讀
    C語(yǔ)言實(shí)現(xiàn)<b class='flag-5'>經(jīng)典</b>排序<b class='flag-5'>算法</b>概覽

    TCP協(xié)議技術(shù)擁塞控制算法

    擁塞控制是在網(wǎng)絡(luò)層和傳輸層進(jìn)行的功能。在網(wǎng)絡(luò)層,擁塞控制可以通過(guò)路由算法來(lái)控制數(shù)據(jù)包在網(wǎng)絡(luò)中的傳輸,以降低網(wǎng)絡(luò)擁塞的發(fā)生。
    的頭像 發(fā)表于 02-03 17:06 ?2284次閱讀
    TCP協(xié)議技術(shù)<b class='flag-5'>之</b>擁塞控制<b class='flag-5'>算法</b>

    verilog的135個(gè)經(jīng)典實(shí)例

    verilog的135個(gè)經(jīng)典實(shí)例
    發(fā)表于 02-02 10:17 ?14次下載
    主站蜘蛛池模板: 最近中文字幕2018MV高清在线| 国产偷抇久久精品A片蜜臀A| gayxxxxgay呻吟受日本| 高清国产mv视频在线观看| 国产亚洲精品久久77777| 久久青青无码AV亚洲黑人| 人妻中文字幕乱人伦在线| 性夜影院午夜看片| 91麻豆国产精品91久久久| 高h超辣bl文| 久久视频这只精品99re6| 日本高清色片| 一久久| 边摸边吃奶边做激情叫床视| 国产曰韩无码亚洲视频| 女人高潮特级毛片| 亚洲国产综合久久久无码色伦| 99精品国产在热| 国产一区二区三区国产精品| 欧美xxxx性喷潮| 亚洲精品123区在线观看| CHINESE老阿姨免费视频| 精品成人在线视频| 日韩欧美一区二区三区免费看| 亚洲深夜在线| 囯产精品久久久久久久久蜜桃 | 1区2区3区4区产品不卡码网站| 国产精品69人妻无码久久| 秘密教学93话恩爱久等了免费| 亚洲成人99| 丰满少妇发泄14p| 毛片免费在线视频| 亚洲高清视频在线| xxnxx动漫| 看美女大腿中间的部分| 亚洲AVAV天堂AV在线网爱情 | 一本道高清无码v| 国产精品高清在线观看地址| 男人网站在线| 在线观看qvod| 国产亚洲精品久久久久5区|