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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[迷宫中的算法实践]迷宫生成算法——Prim算法

發(fā)布時(shí)間:2024/4/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [迷宫中的算法实践]迷宫生成算法——Prim算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?????? 普里姆算法(Prim算法),圖論中的一種算法,可在加權(quán)連通圖里搜索最小生成樹。意即由此算法搜索到的邊子集所構(gòu)成的樹中,不但包括了連通圖里的所有頂點(diǎn)(英語:Vertex (graph theory)),且其所有邊的權(quán)值之和亦為最小。該算法于1930年由捷克數(shù)學(xué)家沃伊捷赫·亞爾尼克(英語:Vojtěch Jarník)發(fā)現(xiàn);并在1957年由美國計(jì)算機(jī)科學(xué)家羅伯特·普里姆(英語:Robert C. Prim)獨(dú)立發(fā)現(xiàn);1959年,艾茲格·迪科斯徹再次發(fā)現(xiàn)了該算法。因此,在某些場合,普里姆算法又被稱為DJP算法、亞爾尼克算法或普里姆-亞爾尼克算法。

——來自百度百科

當(dāng)我們將Prim算法用于迷宮生成時(shí),情況有些不同,維基百科中給出了隨機(jī)Prim迷宮生成算法的解釋及實(shí)現(xiàn)過程:

Randomized Prim's algorithm

This algorithm is a randomized version of Prim's algorithm.

  • Start with a grid full of walls.
  • Pick a cell, mark it as part of the maze. Add the walls of the cell to the wall list.
  • While there are walls in the list:
  • Pick a random wall from the list. If the cell on the opposite side isn't in the maze yet:
  • Make the wall a passage and mark the cell on the opposite side as part of the maze.
  • Add the neighboring walls of the cell to the wall list.
  • Remove the wall from the list.
  • It will usually be relatively easy to find the way to the starting cell, but hard to find the way anywhere else.

    Note that simply running classical Prim's on a graph with random edge weights would create mazes stylistically identical to Kruskal's, because they are both minimal spanning tree algorithms. Instead, this algorithm introduces stylistic variation because the edges closer to the starting point have a lower effective weight.

    我們將算法實(shí)現(xiàn)部分翻譯成中文

  • 讓迷宮全都是墻.。
  • 選一個格,作為迷宮的通路,然后把它的鄰墻放入列表.。
  • 當(dāng)列表里還有墻時(shí):
  • 從列表里隨機(jī)選一個墻,如果它對面的格子不是迷宮的通路:
  • 把墻打通,讓對面的格子成為迷宮的通路.。
  • 把那個格子的鄰墻加入列表。
  • 如果對面的格子已經(jīng)是通路了,那就從列表里移除這面墻。
  • ?

    ?????? 簡單研究算法實(shí)現(xiàn)過程我們可以發(fā)現(xiàn),Prim算法就是不斷地從所有可以是通路的位置中隨意選一個挖洞,直到?jīng)]有可能為通路的位置。

    ?????? 整個實(shí)現(xiàn)過程還是相當(dāng)于隨意為路線附權(quán)值的Prim算法。

    ?

    下面我們來做C#下的代碼實(shí)現(xiàn):

    /// <summary> /// 普利姆迷宮生成法 /// </summary> /// <param name="startX">起始點(diǎn)X坐標(biāo)</param> /// <param name="startY">起始點(diǎn)Y坐標(biāo)</param> /// <param name="widthLimit">迷宮寬度</param> /// <param name="heightLimit">迷宮高度</param> /// <param name="haveBorder">迷宮是否含有墻</param> private int[,] Prim(int startX, int startY, int widthLimit, int heightLimit,bool haveBorder) {//block:不可通行 unBlock:可通行const int block = 0,unBlock = 1;var r=new Random();//迷宮尺寸合法化if (widthLimit < 1)widthLimit = 1;if (heightLimit < 1)heightLimit = 1;//迷宮起點(diǎn)合法化if (startX < 0 || startX >= widthLimit)startX = r.Next(0, widthLimit);if (startY < 0 || startY >= heightLimit)startY = r.Next(0, heightLimit);//減去邊框所占的格子if (!haveBorder){widthLimit--;heightLimit--;}//迷宮尺寸換算成帶墻尺寸widthLimit *= 2;heightLimit *= 2;//迷宮起點(diǎn)換算成帶墻起點(diǎn)startX *= 2;startY *= 2;if (haveBorder){startX++;startY++;}//產(chǎn)生空白迷宮var mazeMap = new int[widthLimit + 1, heightLimit + 1];for (int x = 0; x <= widthLimit; x++){//mazeMap.Add(new BitArray(heightLimit + 1));for (int y = 0; y <= heightLimit; y++){mazeMap[x, y] = block;}}//鄰墻列表var blockPos = new List<int>();//將起點(diǎn)作為目標(biāo)格int targetX = startX, targetY = startY;//將起點(diǎn)標(biāo)記為通路mazeMap[targetX, targetY] = unBlock;//記錄鄰墻if (targetY > 1){blockPos.AddRange(new int[] { targetX, targetY - 1, 0 });}if (targetX < widthLimit){blockPos.AddRange(new int[] { targetX + 1, targetY, 1 });}if (targetY < heightLimit){blockPos.AddRange(new int[] { targetX, targetY + 1, 2 });}if (targetX > 1){blockPos.AddRange(new int[] { targetX - 1, targetY, 3 });}while (blockPos.Count > 0){//隨機(jī)選一堵墻var blockIndex = r.Next(0, blockPos.Count / 3) * 3;//找到墻對面的墻if (blockPos[blockIndex + 2] == 0){targetX = blockPos[blockIndex];targetY = blockPos[blockIndex + 1] - 1;}else if (blockPos[blockIndex + 2] == 1){targetX = blockPos[blockIndex] + 1;targetY = blockPos[blockIndex + 1];}else if (blockPos[blockIndex + 2] == 2){targetX = blockPos[blockIndex];targetY = blockPos[blockIndex + 1] + 1;}else if (blockPos[blockIndex + 2] == 3){targetX = blockPos[blockIndex] - 1;targetY = blockPos[blockIndex + 1];}//如果目標(biāo)格未連通if (mazeMap[targetX, targetY] == block){//聯(lián)通目標(biāo)格mazeMap[blockPos[blockIndex], blockPos[blockIndex + 1]] = unBlock;mazeMap[targetX, targetY] = unBlock;//添加目標(biāo)格相鄰格if (targetY > 1 && mazeMap[targetX, targetY - 1] == block && mazeMap[targetX, targetY - 2] == block){blockPos.AddRange(new int[] { targetX, targetY - 1, 0 });}if (targetX < widthLimit && mazeMap[targetX + 1, targetY] == block && mazeMap[targetX + 2, targetY] == block){blockPos.AddRange(new int[] { targetX + 1, targetY, 1 });}if (targetY < heightLimit && mazeMap[targetX, targetY + 1] == block && mazeMap[targetX, targetY + 2] == block){blockPos.AddRange(new int[] { targetX, targetY + 1, 2 });}if (targetX > 1 && mazeMap[targetX - 1, targetY] == block && mazeMap[targetX - 1, targetY] == block){blockPos.AddRange(new int[] { targetX - 1, targetY, 3 });}}blockPos.RemoveRange(blockIndex, 3);}return mazeMap; }

    轉(zhuǎn)載于:https://www.cnblogs.com/WayneShao/p/5890379.html

    總結(jié)

    以上是生活随笔為你收集整理的[迷宫中的算法实践]迷宫生成算法——Prim算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产亚洲视频在线观看 | 亚洲一区精品在线观看 | 9999精品视频 | 7799精品视频天天看 | 亚洲国产精品天堂 | 国产毛片aaa | 国产青青操 | 欧美久久网 | 欧美黄视频 | 久久久久久香蕉 | 中文字幕一区二区三区免费看 | 国产污视频在线观看 | 日日撸夜夜撸 | 色视频线观看在线播放 | 亚洲熟女乱色一区二区三区 | 老汉av | 69xxx免费视频| 日韩精品卡通动漫网站 | 日本黄网站色大片免费观看 | 久久97精品久久久久久久不卡 | 欧美顶级黄色大片免费 | 人人综合网 | 天天操天天干天天舔 | 欧美性视频在线播放 | 国产精品无码无卡无需播放器 | 精品毛片 | 真人抽搐一进一出视频 | 夜夜操夜夜摸 | 在线观看免费观看在线 | 国产毛片一区二区三区 | 免费人成在线 | 黄色资源在线观看 | 淫综合网| 日韩精品在线观看一区二区 | 欧美一区二区三区公司 | 色哟哟欧美精品 | 美女校花脱精光 | 午夜激情网址 | 久久久免费毛片 | 一本加勒比北条麻妃 | 九九热在线观看视频 | 国产午夜在线观看 | 久久偷看各类wc女厕嘘嘘偷窃 | 国产精品96久久久久久 | 三级网站视频 | 免费在线观看网址 | 国产精品美女在线 | 亚洲欧美日韩国产 | 欧美成人精品一区二区免费看片 | 免费一二区| 蜜臀人妻四季av一区二区不卡 | www射| 毛片网| 泰坦尼克号3小时49分的观看方法 | 久草视频在线免费看 | 亚洲成人自拍网 | 亚洲综合大片69999 | 爆操白虎| 亚洲午夜毛片 | 三级免费网址 | 亚洲天堂久久久 | 少妇免费毛片久久久久久久久 | 亚洲免费色图 | 午夜精品国产精品大乳美女 | 国产美女作爱视频 | 国产精品乱码一区二区三区 | 毛片国产精品 | 中文幕无线码中文字蜜桃 | 人人爽视频 | 麻豆www| 久久久久久久久久久网 | 成人在线观 | 美国av片 | 夜夜嗨av禁果av粉嫩av懂色av | 毛片福利 | 男人的天堂一区 | 一区二区三区www污污污网站 | 欧美成人综合网站 | 欧美在线一 | 久久久久影视 | 国产精品av免费观看 | 最近中文字幕在线中文高清版 | 国产在线123 | 国产九区| 欧美日韩国产激情 | 人妻换人妻a片爽麻豆 | 激情全身裸吻胸 | 91大奶 | 欧美11一13sex性hd | 丁香婷婷六月 | 人人爽久久涩噜噜噜网站 | 国产色无码精品视频 | 五月花婷婷 | 伊人婷婷色 | 美女啪啪网 | 激情婷婷六月 | 波多野结衣导航 | 人人干视频| 里番精品3d一二三区 |