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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1053 Path of Equal Weight (30分) :[C++题解]dfs求树的路径长度、邻接表

發(fā)布時間:2025/4/5 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级1053 Path of Equal Weight (30分) :[C++题解]dfs求树的路径长度、邻接表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 題目分析
    • 題目鏈接

題目分析



輸入樣例:

20 9 24 10 2 4 3 5 10 2 18 9 7 2 2 1 3 12 1 8 6 2 2 00 4 01 02 03 04 02 1 05 04 2 06 07 03 3 11 12 13 06 1 09 07 2 08 10 16 1 15 13 3 14 16 17 17 2 18 19

輸出樣例:

10 5 2 7 10 4 10 10 3 3 6 2 10 3 3 6 2

題意重述:給定一顆二叉樹和一個路徑長度s,讓遍歷二叉樹,找出所有長度等于s的路徑,并且輸出。
分析:使用鄰接表來存樹。 然后就是dfs來遍歷。

當遇到葉子結(jié)點h[u] == -1的時候,如果長度等于s則保存一條路徑,并且dfs遞歸返回。

另外就是深度優(yōu)先遍歷鄰接表。其中e[i]存的是結(jié)點,不是i。

//暴搜u的所有兒子for(int i=h[u]; i!= -1 ;i=ne[i]){path.push_back(w[e[i]]); //更新路徑dfs(e[i],s+w[e[i]],path); //暴搜下一個點path.pop_back(); //恢復現(xiàn)場}

ac代碼

#include<bits/stdc++.h> using namespace std; const int N = 110;int n , m,S; //鄰接表 int h[N],e[N],ne[N],idx;int w[N]; //權(quán)重vector<vector<int>> ans; //記錄路徑// e[i]存的是當前結(jié)點 //ne[i] 存的是單鏈表中下一個結(jié)點“序號” //idx 就是單鏈表中的“序號” void add(int a, int b){e[idx] =b, ne[idx]= h[a],h[a] =idx ++; }/*暴搜所有等于S的路徑u:當前結(jié)點s:權(quán)值path:路徑 */ void dfs(int u,int s , vector<int>& path){//遞歸結(jié)束條件if(h[u] == -1){ // 是葉子結(jié)點if(s == S) {ans.push_back(path);return;}}//暴搜u的所有兒子for(int i=h[u]; i!= -1 ;i=ne[i]){path.push_back(w[e[i]]); //更新路徑dfs(e[i],s+w[e[i]],path); //暴搜下一個點path.pop_back(); //恢復現(xiàn)場}}int main(){memset(h, -1, sizeof h);cin>> n >> m >> S;for(int i = 0; i < n; i++) cin>>w[i];//i號結(jié)點的權(quán)重是w[i]while(m--){int id , n1;cin>> id >> n1;while(n1--){ //id結(jié)點的兒子們int son;cin >> son;add(id ,son);}}//根結(jié)點int root = 0;//初始化路徑為根結(jié)點vector<int> path({w[0]});//暴搜dfs(root,w[0],path);//排序sort(ans.begin(),ans.end(),greater<vector<int>>());//輸出for(auto p :ans){cout<<p[0];for(int i=1;i<p.size();i++) cout<<" "<<p[i];cout<<endl;}}

題目鏈接

acwing1539. 等重路徑
PAT甲級1053 Path of Equal Weight (30分)

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的PAT甲级1053 Path of Equal Weight (30分) :[C++题解]dfs求树的路径长度、邻接表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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