dfs+記憶化搜索,求任意兩點之間的最長路徑


C、Coolest Ski Route

題意:n個點,m條邊組成的有向圖,求任意兩點之間的最長路徑

dfs記憶化搜索

#include<iostream>
#include<string.h> #include<string> #include<algorithm> #include<math.h> #include<string> #include<string.h> #include<vector> #include<utility> #include<map> #include<queue> #include<set> #define mx 0x3f3f3f3f #define ll long long using namespace std; int dis[1005],way[1005][1005],vis[1005],flag[1005]; int n,m; int dfs(int x) { if(vis[x]==1) return dis[x]; for(int i=1;i<=n;i++) { if(way[x][i]!=0) dis[x]=max(dis[x],dfs(i)+way[x][i]);//dis[x]表示以x為起點能走的最長路徑是dis[x]  } vis[x]=1; return dis[x]; } int main() { cin>>n>>m; for(int i=0;i<m;i++) { int x,y,z; cin>>x>>y>>z; flag[y]=1;//標記終點 if(way[x][y]!=0) way[x][y]=max(way[x][y],z); else way[x][y]=z; } int ans=0; for(int i=1;i<=n;i++)//枚舉搜索起點  { if(flag[i]==0)//給的是有向圖,只能從有向圖的起點開始搜索 ans=max(ans,dfs(i)); } cout<<ans<<endl; return 0; } /* 5 5 1 2 15 2 3 12 1 4 17 4 2 11 5 4 9 6 6 1 2 2 4 5 2 2 3 3 1 3 2 5 6 2 1 2 4 */


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM