日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 草草影院ccyycom| 老妇女av | 在线观看高清视频 | 免费视频二区 | 操操操操操操操操操操 | 国产曰肥老太婆无遮挡 | 在线观看日批视频 | 久久精品无码Av中文字幕 | 亚洲涩涩 | 看国产一级片 | 性色一区二区 | 综合激情亚洲 | 91av在线播放 | 国内精品视频在线 | 欧美黄页网站 | 日韩精品中文字幕在线观看 | 在线看的免费网站 | 久久亚洲色图 | 男人操女人的视频 | 久久精品视频国产 | 97超碰网 | 摸摸摸bbb毛毛毛片 午夜爽爽影院 | 东京热一本视频一区 | 亚洲综合自拍 | 粉嫩一区 | 美妇湿透娇羞紧窄迎合 | 熟女性饥渴一区二区三区 | 中国新婚夫妻性猛交 | 人人妻人人藻人人爽欧美一区 | 免费看片色 | 99re6热在线精品视频播放 | 欧美一级片免费看 | 无码av免费精品一区二区三区 | 久草热播| 捆绑中国女人hd视频 | 天天天操 | 日韩av在线观看免费 | 国产在线观看一区二区三区 | 国产偷怕 | 日韩成人免费在线 | 久久精品人妻一区二区三区 | 视频在线91| 亚洲无打码 | 人妻内射一区二区在线视频 | 蜜臀麻豆 | 亚洲精品第一页 | 日韩精品视频免费播放 | 国产91国语对白在线 | 日韩乱码在线观看 | 一本色道久久88加勒比—综合 | 黄网av | 在线观看国产视频 | 精品成在人线av无码免费看 | 欧美日韩中文字幕一区二区三区 | 欧美日韩人妻精品一区二区 | youjizz自拍 | 日韩成人在线影院 | 国产女人高潮毛片 | 成年人黄色网址 | 老司机精品视频网站 | 九九热综合 | 91性色| 骚虎免费视频 | 国产精品一区二区三区免费在线观看 | 日韩字幕 | 国产在线中文字幕 | 无套内谢少妇毛片 | 欧美日韩成人一区二区 | 人人妻人人澡人人爽欧美一区双 | 纯爱无遮挡h肉动漫在线播放 | 伊人一级片 | 国产毛片网| www.久久色 | 最新自拍偷拍 | 欧美亚洲综合一区 | 黄色片一区| 亚洲精品91天天久久人人 | 成人欧美一区二区三区小说 | 国产精品久久..4399 | 91avcom| 精品国产无码在线观看 | 操你啦影院 | 亚洲自拍网站 | 免费在线播放 | 欧美激情影音先锋 | 99精品久久精品一区二区 | 法国空姐电影在线 | 1000部啪啪 | 啪啪福利 | 裸体喂奶一级裸片 | 欧美三级午夜理伦三级小说 | 影音先锋国产 | 91麻豆精品国产91 | 337p粉嫩大胆噜噜噜噜69影视 | 国产小视频免费观看 | 羞羞答答一区 | 台湾佬中文在线 | 久久亚洲综合国产精品99麻豆精品福利 | 菠萝菠萝蜜网站 |