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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

dijkstra 的优先队列优化

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dijkstra 的优先队列优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  既然要學(xué)習(xí)算法,就要學(xué)習(xí)到它的精髓,才能夠使用起來得心應(yīng)手。

  我還是遠(yuǎn)遠(yuǎn)不夠啊。

  早就知道,dijkstra 算法可以用優(yōu)先隊列優(yōu)化,我卻一直不知道該怎樣優(yōu)化。當(dāng)時,我的思路是這樣的:假設(shè)有n個頂點,將這n個頂點的id和距原點的距離放在結(jié)構(gòu)體內(nèi),再將這n個結(jié)構(gòu)體放入優(yōu)先隊列中,堆頂是距源點距離最小的點。每次要更新距離時,僅僅只需要取堆頂?shù)臄?shù)就可以了。然而,具體要怎樣更新堆內(nèi)各點的距離呢?將堆頂取出,更新后再放回去?這樣的話堆頂永遠(yuǎn)都會是同一個元素了,因為堆頂元素在更新后,還是距離最小的。那么我們可以依次取出堆頂元素,放在結(jié)構(gòu)體數(shù)組之內(nèi),等待更新完畢后再放回去,那么這樣的時間復(fù)雜度是2*n,而原先的時間復(fù)雜度,也是2*n,這樣的優(yōu)化沒有意義,反而還多了一個結(jié)構(gòu)體數(shù)組浪費空間。

  如果你也和我的想法一樣,那我們真是太有緣分了,看來大家都是蠢的七竅流血的一類人啊,你是不是也和我一樣,正在反思自己是不是應(yīng)該放棄學(xué)習(xí)算法啊?實際上,在dijkstra里面,有一個十分重要的標(biāo)記數(shù)組,這個標(biāo)記數(shù)組決定了,已經(jīng)確定了最短距離的點,就不要再次優(yōu)化了!你明白了吧,想想自己真是蠢吶,竟然忘記如此重要的數(shù)組!

  讓我們再次思考,是否要將所有沒有確定的點全部放入數(shù)組呢?

  當(dāng)然不要,我們只要將剛剛更新過的放進(jìn)去就行,因為那些沒有更新的,肯定不會是路徑最短的。那么我們每次都放,就會導(dǎo)致某個節(jié)點被放進(jìn)去很多次了,但是沒關(guān)系,他們的被放進(jìn)去的時候,距離是不同的,所以距離大的會沉到底下去,最短路徑一定不是他們(對同一節(jié)點來說),他們要出推時,我們只處理第一個,以后的一律不處理。這個我們還用一個標(biāo)記數(shù)組來解決。

  代碼自己去找吧,https://blog.csdn.net/jobsandczj/article/details/49962557,這個人寫得不錯,除了碼風(fēng)很丑,加上竟然使用鄰接矩陣。。。然后還有book數(shù)組定義了沒有使用以外,其他的都還行。

  如果你連這些問題都不想面對,或者根本就不想看代碼的話,你還是轉(zhuǎn)行吧。

?  在此還是貼上自己的模板吧

  這個模板跑起來反而比我原先的代碼更慢,我覺得這是鄰接表的問題,因為在一開始我用的是啊哈算法的鄰接表,而現(xiàn)在用的是vector,再加上可能我在做的那個題太水了,數(shù)據(jù)量太小,導(dǎo)致優(yōu)先隊列的優(yōu)勢沒有發(fā)揮出來。

#include<iostream> #include<algorithm> #include<vector> #include<queue> using namespace std; struct node {int x;int s;bool operator<(const node p)const{return p.s<s;} }; bool book[100]; int dis[100]; const int inf = 2100000000; int main() {vector<int>u[100];vector<int>w[100];int n,m;cin>>n>>m;int x,y,z;for(int i=0;i<m;i++){cin>>x>>y>>z;u[x].push_back(y);w[x].push_back(z);}fill(dis,dis+n+1,inf);dis[1]=0;priority_queue<node>q;node exa;exa.x=1;exa.s=0;q.push(exa);while(!q.empty()){exa=q.top();q.pop();if(book[exa.x]){continue;}book[exa.x]=true;int t=exa.x;for(int i=0;i<u[t].size();i++){if(dis[u[t][i]]>dis[t]+w[t][i]){dis[u[t][i]]=dis[t]+w[t][i];exa.s=dis[u[t][i]];exa.x=u[t][i];q.push(exa);}}}for(int i=1;i<=n;i++){cout<<dis[i]<<" ";}cout<<endl; }

  

?下面的代碼包括了對路徑的輸出,只是我沒有找到這樣的題,所以不敢保證算法的正確性:

#include<iostream> #include<algorithm> #include<vector> #include<queue> #include<stack> using namespace std; struct node {int x;int s;bool operator<(const node p)const{return p.s<s;} }; bool book[100]; int dis[100]; int f[1000]; const int inf = 2100000000; int main() {vector<int>u[100];vector<int>w[100];int n,m;cin>>n>>m;int x,y,z;for(int i=0;i<m;i++){cin>>x>>y>>z;u[x].push_back(y);w[x].push_back(z);}fill(dis,dis+n+1,inf);fill(f,f+n+1,-1);dis[1]=0;priority_queue<node>q;node exa;exa.x=1;exa.s=0;q.push(exa);while(!q.empty()){exa=q.top();q.pop();if(book[exa.x]){continue;}book[exa.x]=true;int t=exa.x;for(int i=0;i<u[t].size();i++){if(dis[u[t][i]]>dis[t]+w[t][i]){dis[u[t][i]]=dis[t]+w[t][i];exa.s=dis[u[t][i]];f[u[t][i]]=t;exa.x=u[t][i];q.push(exa);}}}stack<int>h;for(int i=1;i<=n;i++){cout<<dis[i]<<": ";int ah=f[i];while(ah!=-1){h.push(ah);ah=f[ah];}while(!h.empty()){cout<<h.top()<<" ";h.pop();}cout<<i<<" ";cout<<endl;}cout<<endl; }

  

  每個人都是被動出生,只有選擇死亡才是真正的自由!

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

總結(jié)

以上是生活随笔為你收集整理的dijkstra 的优先队列优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 婷婷综合网站 | 鲁一鲁在线视频 | 精品国产乱码久久久久久1区二区 | 理论av | 日韩中文字幕亚洲精品欧美 | 噼里啪啦免费看 | 超清纯大学生白嫩啪啪 | 手机在线看片1024 | 国产短视频一区 | 日韩精品视频免费在线观看 | 一级黄色录像免费观看 | 欧美乱妇日本无乱码特黄大片 | 久久成人网18网站 | 91免费看视频| 欧美youjizz| av在线天堂| 日产电影一区二区三区 | 久久国产亚洲 | 亚洲逼逼| 轮乱 | 欧洲久久精品 | www.成人 | 被警察猛c猛男男男 | 一个人免费在线观看视频 | 亚洲无码久久久久久久 | 欧美一级黄色片 | 欧美一级性片 | 亚洲精品视频在线观看免费 | 中文字幕亚洲在线观看 | 丰满的女人性猛交 | 人人插人人搞 | 啪免费视频 | 欧美黄色免费在线观看 | 综合色久 | 国产精品第8页 | 亚洲伦理自拍 | 亚洲情射| 亚洲夜夜夜 | 国产精品国产成人国产三级 | 久草中文在线观看 | √资源天堂中文在线视频 | 用我的手指扰乱你 | 激情av | 精品少妇theporn | 国产v亚洲v天堂无码久久久 | 人人妻人人澡人人爽人人精品 | 给我看免费高清在线观看 | av一道本 | www.五月婷婷 | 国产视频久久久 | 激情伊人五月天 | 日韩亚洲欧美在线 | 欧美aa在线观看 | 亚洲精品一二 | 欧美黄色性视频 | 国产超碰人人爽人人做人人爱 | 美女赤身免费网站 | 日韩av无码久久 | 91精品一区二区三 | 中文天堂在线播放 | 玩偶姐姐在线观看免费 | 福利在线播放 | 九九久久免费视频 | 日本少妇喷水视频 | 两女双腿交缠激烈磨豆腐 | 亚洲狠狠丁香婷婷综合久久久 | 国产美女黄色片 | 欧美综合激情 | 国产一区999| 久久国产精品影院 | 亚洲成人自拍偷拍 | 在线欧美国产 | 永久看看免费大片 | 久国产视频| 一级久久| 亚洲成人一区二区在线观看 | 波多野结衣视频网站 | 狠狠躁夜夜躁人人爽天天高潮 | 丁香花电影高清在线阅读免费 | 精品视频一二 | 欧美视频成人 | 久久理论 | 日鲁鲁 | 蜜色影院| 中文字幕亚洲乱码熟女一区二区 | 国产精品一区三区 | www,超碰 | 日韩爱爱片 | 欧美黑人疯狂性受xxxxx野外 | 九色porny视频 | 日韩少妇裸体做爰视频 | 国产精品久久久久一区二区 | 亚洲成av人片一区二区梦乃 | 色综合天天综合综合国产 | 淫羞阁av导航 | 亚洲综合激情小说 | 日本伊人色 | 日韩毛片儿 | 91麻豆精品国产理伦片在线观看 |