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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

POJ-1724 深搜剪枝

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ-1724 深搜剪枝 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這道題目如果數據很小的話。我們通過這個dfs就可以完成深搜:

void dfs(int s) {if (s==N){minLen=min(minLen,totalLen);return ;}for (int i=0;i<G[s].size();i++){Road r=G[s][i];if (r.t+totalCost>K)continue;if (!visited[r.d]){visited[r.d]=1;totalLen+=r.L;totalCost+=r.t;dfs(r.d);totalCost-=r.t;totalLen-=r.L;visited[r.d]=0;}} }

我們可以看一下這個代碼,意思就是說,如果找邊的時候,我們已經搜索到了終點,也就是s==N的時候,我們就直接改寫minLen,然后返回到上一層,進行totalCost,totalLen和visited數組的返回工作,因為我們這次走的是這一條路,當我們返回的時候,就將這條路的終點標記全部還原,因為從這條路的起始點還可能會有其它的路,如果不把它還原的話,其它的路就被封死了,深搜就無法進行的很完全了,不能說是遍歷了。

我們對于以s為起點的邊進行遍歷,發現邊r的花費加上之前的總花銷已經超過K,總錢數了,我們就跳過這一條邊,這是第一次剪枝。

如果我們沒有訪問過邊r的終點d時,我們就把它訪問位設置為1,總路程加上r邊長,總花費加上r邊的過路費,然后深搜d。

這是可以通過一些較小的數據的,但是這道題中的數據很大,而dfs中又做了很多的無用功,所以我們進行以下的剪枝:

如果d點沒有被訪問過,我們就判斷如果這次走到點d的時候,總路程已經超過minLen了,也就是之前找到的最短路,我們就跳過這個終點的深搜,我們直接不走這條路了。

這個剪枝還是不夠,所以我們拿空間換取時間,我們設置一個minL[110][10010]數組,minL[k][m]表示之前走到點k并且花費為m的最短長度。

如果我們這次走到點k,并且花銷為m,但是我們的路程已經大于這個最短長度了,我們就跳出這重循環,執行循環的下一次。

因為它的意思,也就是說,我們每走過一個點,我們就進行一次比較,確保我們不花相同的錢,走更遠的路,這個剪枝極為有效,直接可以過。

代碼如下:

#include <iostream> #include <vector> #include <cstring> using namespace std; int N,K,R; struct Road {int d,L,t; }; vector < vector<Road> > G(110);int minLen; int minL[110][10010]; int totalLen; int totalCost; int visited[110];void dfs(int s) {if (s==N){minLen=min(minLen,totalLen);return ;}for (int i=0;i<G[s].size();i++){Road r=G[s][i];if (r.t+totalCost>K)continue;if (!visited[r.d]){if (totalLen+r.L>=minLen)continue;if (totalLen+r.L>=minL[r.d][r.t+totalCost])continue;visited[r.d]=1;totalLen+=r.L;minL[r.d][r.t+totalCost]=totalLen;totalCost+=r.t;dfs(r.d);totalCost-=r.t;totalLen-=r.L;visited[r.d]=0;}} }int main() {cin>>K>>N>>R;for (int i=0;i<R;i++) {int s;Road r;cin>>s>>r.d>>r.L>>r.t;if (s!=r.d) {G[s].push_back(r);}}memset(visited,0,sizeof(visited));for (int i=0;i<110;i++) {for (int j=0;j<10010;j++) {minL[i][j]=1<<30;}}totalLen=0;totalCost=0;minLen=1<<30;visited[1]=1;dfs(1);if (minLen<(1<<30))cout<<minLen<<endl;else cout<<-1<<endl;return 0; }

?

轉載于:https://www.cnblogs.com/xyqxyq/p/10211350.html

總結

以上是生活随笔為你收集整理的POJ-1724 深搜剪枝的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人做爰视频www网站小优视频 | 激情综合网激情 | 九九色九九 | 午夜精品一区二区三区在线 | 老司机精品导航 | 夜夜草天天草 | 国产美女引诱水电工 | 免费观看成人在线视频 | 国产欧美一区二区三区精华液好吗 | 一区二区视频网站 | 六月丁香婷婷网 | 台湾佬中文字幕 | 国产特黄一级片 | 国产片一区二区 | 91黄色看片 | 欧美精品视 | 青青草视频在线看 | 91精品91久久久中77777老牛 | 色桃网 | 大地资源中文在线观看免费版 | 爱插网| 中文字幕第3页 | 久久精品国产77777蜜臀 | 精品在线观看免费 | 中国女人性猛交 | 成人涩涩网站 | 国产伊人精品 | 国产又粗又猛又爽又黄的网站 | 一起草在线视频 | 久久成人在线 | 国产娇小hdxxxx乱 | 天天爱天天插 | 国产日韩欧美综合 | 成人性做爰aaa片免费 | 国产精品宾馆在线 | 91亚瑟视频 | jizz性欧美23 | 欧美日韩精品久久久免费观看 | 亚洲成人av免费在线观看 | 免费国产羞羞网站视频 | 色综合狠狠 | 杨贵妃颤抖双乳呻吟求欢小说 | 国产视频亚洲 | 中文字幕第23页 | 国产免费成人 | 91秘密入口| 国产精品v日韩精品v在线观看 | 亚洲性欧美 | 小早川怜子一区二区三区 | 亚洲女人初尝黑人巨大 | 快射视频在线观看 | 青青草中文字幕 | 欧美精品一区二区三区在线 | 日本寂寞少妇 | 美女扒开尿口给男人桶 | 欧美αv| 日本午夜激情视频 | 男女视频免费 | 国产一区在线不卡 | 91婷婷在线| 男女黄网站 | 在线播放国产精品 | 国产xxxx在线观看 | 久草新 | 刘亦菲国产毛片bd | 亚洲一区电影在线观看 | 中文字幕在线三区 | 亚洲1234区 | 美女高潮在线 | 国产精品无码午夜福利 | 得得的爱在线视频 | 骑骑上司妻电影 | 手机看片午夜 | 亚洲中文字幕无码一区 | 国产精品成人3p一区二区三区 | 国产一线在线观看 | 国产综合无码一区二区色蜜蜜 | 天天碰天天摸 | 亚洲成人777| 国产中文自拍 | 日韩精品观看 | 日韩大片免费在线观看 | 免费一级网站 | h视频在线看 | www黄色网址| 99无码熟妇丰满人妻啪啪 | 日韩视频免费 | 国产成人综合一区二区三区 | 91少妇丨porny丨 | 女人18毛片水真多 | 99精品欧美一区二区三区 | 国产在线观看无码免费视频 | 99午夜视频 | 奶水喷溅 在线播放 | 日本动漫艳母 | 香蕉视频在线看 | 水蜜桃色314在线观看 | 在线免费看mv的网站入口 | 日本免费在线视频观看 |