真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

用棧實現(xiàn)迷宮游戲?qū)ぢ?創(chuàng)新互聯(lián)

   在我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的時候都曾經(jīng)見過迷宮游戲,迷宮游戲的實現(xiàn)其實并不難,但是,我們在實現(xiàn)每一個算法的時候都應(yīng)該想一想這個問題的每一個解。最近,博主已經(jīng)開始重溫數(shù)據(jù)結(jié)構(gòu)啦,記得我們以前學(xué)習(xí)這里的時候,老師會用隊列來實現(xiàn)迷宮最優(yōu)解的尋找,氮素呢,博主就是這么可愛,博主就是想試試用棧來找一下。

創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、太平網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為太平等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

   在實現(xiàn)之前讓我們先來復(fù)習(xí)一下棧的特點:first in last out

   對于棧這種數(shù)據(jù)結(jié)構(gòu)我們只能在棧頂對其操作,根據(jù)實際情況可將其實現(xiàn)成鏈?zhǔn)交蛘唔樞蚪Y(jié)構(gòu)。但是一般情況下我們都會實現(xiàn)成順序結(jié)構(gòu),因為棧的特點導(dǎo)致了順序結(jié)構(gòu)管理方便,并且CPU緩存利用率更高。下面我們來簡單的講解一下迷宮小游戲

    為了避免用戶操作的不便性,我們選擇將迷宮提前寫好放在一個叫做"Maze.h"的文件中

用棧實現(xiàn)迷宮游戲?qū)ぢ?></p><p>*第一行的兩個數(shù)字是迷宮的行和列</p><p>   我們解決迷宮尋路問題的基本思想是回溯?;厮菔鞘裁匆馑寄?? 就是說,找不到就回退的思想。今天我們的程序要解決的問題是尋找最優(yōu)解,所以,迷宮的每一條路我們都要去走一遍,這樣,我們才能找到最短的那條路。</p><p>我們先來看一下程序是怎么寫的(如果噴,請輕點<img src= s1; Pos man = entry; Pos next = man; Pos cur = entry; while ( 1 ) { if (!Check(a, man, R, C)) { cout << "最佳路徑長度:"; cout << min.size() << endl; return true; } s1.push(man); while (!s1.empty()) { a[man._x*C + man._y] = 2; if (man._x == (R - 1) || man._y == (C - 1)) { cout << "Find&end" << endl; if ((s1.size() < min.size()) || min.size() == 0) min = s1; while (!s1.empty()) { cur = s1.top(); s1.pop(); if (Check(a, cur, R, C)) { man = cur; break; } } if (s1.empty()) { cout << "最佳路徑長度:"; cout << min.size() << endl; return true; } } //********************************************下 next = man; next._x++; if (IsValid(a, next, R, C)) { s1.push(man); man = next; continue; } //********************************************右 next = man; next._y++; if (IsValid(a, next, R, C)) { s1.push(man); man = next; continue; } //********************************************左 next = man; next._y--; if (IsValid(a, next, R, C)) { s1.push(man); man = next; continue; } //********************************************上 next._x--; if (IsValid(a, next, R, C)) { s1.push(man); man = next; continue; } else { man = s1.top(); s1.pop(); } } man = entry; } } void GameTest() { //**********************從文件讀入迷宮大小********************** ifstream fout("Maze.txt"); stack s1; int Row = 0; int Col = 0; char ch = fout.get(); while (ch != ' ') { int tmp = ch - '0'; s1.push(tmp); ch = fout.get(); } int c = 0; while (!s1.empty()) { Row += s1.top()*(int)pow(10, c); s1.pop(); c++; } ch = fout.get(); while (ch != ' '&&ch != '\n') { int tmp = ch - '0'; s1.push(tmp); ch = fout.get(); } c = 0; while (!s1.empty()) { Col += (int)s1.top()*(int)pow(10, c); s1.pop(); c++; } int *a = new int[Row*Col]; //******************************************************** Pos entry(0, 1); cout << endl << "***********    Map    **********" << endl; GetMaze(a, Row, Col, fout); GamePlay(a, entry, Row, Col); cout << endl << "***********    Map    **********" << endl; PrintMap(a, Row, Col); fout.close(); }

**記得在打開文件的時候做異常處理哦。博主在這里就不改了,小伙伴們自己看看

   上面的代碼呢,其實寫的非常的不好,尤其是在代碼復(fù)用的方面,不過,博主今天只是來舉個栗子,今后會更加注意,你們也要注意哦,上面是個反面教材用棧實現(xiàn)迷宮游戲?qū)ぢ?>(請理解一個看見自己代碼想吐的我)</p><p>解法詳解:用一個全局的棧結(jié)構(gòu)來存儲最優(yōu)路徑 min</p><p>         用一個局部的站結(jié)構(gòu)來存儲當(dāng)前一次得出的路徑 s1</p><p>         每一步都需要判斷上下左右四個方向是否可走</p><p>         ***注意:每次判斷時將next的值先賦成當(dāng)前的位置再進(jìn)行加減否則產(chǎn)生副作用</p><p>          兩層循環(huán):里面一層即當(dāng)前一次尋路完成</p><p>         外面一層即再也無路可循時我們獲得了最優(yōu)解</p><p>**嗯,再看一眼仍然覺得這個代碼看得我辣眼睛(捂臉)。</p><p>請圍觀群眾不吝賜教哦~</p><p>創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。</p>            <br>
            文章題目:用棧實現(xiàn)迷宮游戲?qū)ぢ?創(chuàng)新互聯(lián)            <br>
            文章網(wǎng)址:<a href=http://weahome.cn/article/ccsche.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部