日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈的应用_DFS解迷宫问题

發布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈的应用_DFS解迷宫问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

深度優先搜索DFS求解迷宮問題

找到迷宮的可行路徑的坐標,這是一個搜索遍歷問題。

實現思路:

可行的路徑保存在路徑向量P中,從當前點尋找可行方向,如果可行則next入棧,不行則出棧退回前一點。

搜尋可行路徑的代碼:

while (!P.empty()){if (P.back().direction < d)//d是方向個數,表示可行{point next= { P.back().pt.x+delta[P.back().direction].x,P.back().pt.y + delta[P.back().direction].y };//下一個點++P.back().direction;if (maze[next.x][next.y] == unvisited)//未被訪問{maze[next.x][next.y] = visited;P.push_back({ next,0 });//放進路徑里if (next.x == destination.x&&next.y == destination.y)//到達終點break;}}elseP.pop_back();//,點無路可走時,出棧返回上一個點}

坐標軸:假定朝下為x軸正方向,朝右為y軸正方向

這里可以移動方向分為上下左右四種(d=4)情況,它們相對于當前點的方向偏移量如下:
右:{0,1}
下:{1,0}
左:{0,-1}
上:{-1,0}
構成方向向量:以下標取值0, 1, 2, 3標記右,下,左,上與當前點的偏移量.
point delta[d]={{0,1},{1,0},{0-1},{-1,0}};
舉例子:delta[0]表示向右走,delta[1]表示向下走。
下個點next表示為:當前點的位置坐標+偏移量

point next= { P.back().pt.x + delta[P.back().direction].x,P.back().pt.y + delta[P.back().direction].y };//下一個點

完整代碼:

#include"pch.h" #include <iostream> #include <vector>using namespace std;//點坐標 struct point {int x;int y; }; //狀態:點坐標+方向 struct status {point pt;int direction; // 以direction取值0, 1, 2, 3標記東南西北. };int main() {const int m = 5;const int n = 7;char maze[m][n] = { {'*','*','*','*','*', '*','*'},{'*','0','*', '0','0','0','*'},{'*','0','*', '0','*','0','*'},{'*','0','0', '0','*','0','*'},{'*','*','*', '*','*','*','*'}};const char visited = 'V';//訪問過的標記const char unvisited = '0';//未訪問過的標記//可行的方向數目0,1,2,3分別代表東南西北方向和當前位置的偏移量const int d = 4;const point delta[d] = { {0,1},{1,0},{0,-1},{-1,0}};//起點和終點坐標point source = { 1,1 };point destination = {3,5};vector<status> P;//搜索時保存路徑所用的向量,可視為棧;P.reserve(m*n);//提前預留容量;P.push_back({ source,0 });//設定初始位置,并設定初始方向;maze[source.x][source.y] = visited;//起點定為已經訪問while (!P.empty()){if (P.back().direction < d)//方向可取d是方向個數{point next= { P.back().pt.x+delta[P.back().direction].x,P.back().pt.y + delta[P.back().direction].y };//下一個點++P.back().direction;if (maze[next.x][next.y] == unvisited)//未被訪問{maze[next.x][next.y] = visited;P.push_back({ next,0 });//放進路徑里if (next.x == destination.x&&next.y == destination.y)//到達終點break;}}elseP.pop_back();//,點無路可走時,出棧返回上一個點}cout << "迷宮圖如下:" << endl; //print the mazefor (size_t i = 0; i < m; ++i)for (size_t j = 0; j < n; ++j){cout << maze[i][j];if (j == n - 1)cout << endl;} //打印路徑cout << "可行坐標路徑為:" << endl;for (const auto& c : P)cout << c.pt.x << " " << c.pt.y << endl;return 0; }

測試結果:

總結

以上是生活随笔為你收集整理的栈的应用_DFS解迷宫问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成人短视频在线观看 | 在线草 | 少妇献身老头系列 | 国产又黄又猛的视频 | 看一级黄色大片 | aaa一级片 | 久久99久久98精品免观看软件 | 偷拍亚洲视频 | 韩国成年人网站 | 午夜裸体性播放 | 麻豆www| 长河落日电视连续剧免费观看 | 国产精品视频一区二区三区不卡 | xxxxxxxx黄色片| 久青草视频 | 日本91网站| 91人妻一区二区 | 亚洲va在线 | 亚洲一区二区激情 | se94se欧美| 亚洲欧洲国产日韩 | 97麻豆视频 | 午夜电影天堂 | 久久免费精品 | 日日夜夜免费精品视频 | 少妇人妻互换不带套 | 国产成人精品亚洲男人的天堂 | 偷偷操不一样的久久 | 国产精品久久久久久 | 麻豆一区二区在线 | 不卡的日韩av | 黄网视频在线观看 | 吃奶av| 国产经典久久久 | 国产黄色一级网站 | 亚洲第一页夜 | 免费在线视频一区 | 久久成年网 | 国产精欧美一区二区三区白种人 | 中文字幕无码精品亚洲35 | 日韩成人av影院 | 艳情五月| 午夜av影视 | 日韩亚洲国产精品 | 中文字幕五区 | 日韩亚洲欧美一区二区 | 国产一级片在线播放 | 日本免费高清 | 91黄色看片 | 天堂av一区二区三区 | 日韩不卡一二三区 | av日韩在线播放 | www.youjizz.com视频 | 尤物网址在线观看 | 国产午夜精品久久久 | 在线免费观看视频 | 精品人妻一区二区三区麻豆91 | 成人伊人网站 | 福利视频免费 | 91美女网| 中文字幕视频 | 亚洲精品成av人片天堂无码 | 奇米影视在线视频 | 亚洲精品乱码久久久久久不卡 | 欧美a图| 男男啪啪网站 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 日本三级理论片 | 男女作爱免费网站 | 秋霞影院一区二区 | 亚欧精品在线 | 男女午夜激情 | 午夜剧场91 | 欧美一级淫 | 黄色三级视频在线观看 | 让男按摩师摸好爽视频 | 村姑电影在线播放免费观看 | av官网在线观看 | www黄色在线观看 | 国产一区网 | 天天躁日日躁狠狠躁 | 91视频啊啊啊 | 少妇人妻在线视频 | 日韩在线视频网站 | 精品人妻一区二区三区免费 | 欧美成人精品一区二区三区在线看 | 中文字幕免费高清网站 | 国产乱人乱偷精品视频 | 免费黄在线 | 欧美久久久久久久久久久 | 看毛片的网址 | 午夜av剧场 | 国产性xxxx高清 | 久久精品国产免费看久久精品 | 国产精品自拍片 | 高潮在线视频 | 色婷婷导航 | 草莓巧克力香氛动漫的观看方法 | 国产精品久久福利 |