P1294 高手去散步

https://www.luogu.com.cn/problem/P1294
搜索,DFS
黄色题
思路:
1.枚举每一个起点,找到最长相伴的一条路程
2.要注意判断死路的情况 
复制代码
#include<bits/stdc++.h> using namespace std; int n,m; int mp[25][55]; bool vis[25]; int ans,s; void dfs(int x,int y){//搜索 ,x,y是这两个景点 if(vis[y]){//当我们发现这个景点来过时,我们就可以存下答案了 jie: ans=max(ans,s); //只存最大的路程 return ;//回到上一步看看有没有更优解 } for(int i=1;i<=n;i++){//遍历数组 if(!vis[x]&&mp[y][i]!=0){//如果这个景点我们没有来过,且我们找到了与之联通的点 s+=mp[x][y]; //暂存变量s先存下我们走过的路程 vis[x]=1; //标记我们来过这个景点 dfs(y,i); //进行递归,将下个联通点存入 s-=mp[x][y]; vis[x]=0; //回溯 } } for(int i=1;i<=n;i++){//这一部分是针对绝路的,就是这个景点只有一个景点与之相连,到了死路不能往下再走了 if(mp[y][i]!=0) //如果发现不是死路就跳出 break; else if(i==n){ //遍历完地图发现是死路,s就加上当前走过的路程 s+=mp[x][y]; goto jie; //直接跳入到 ans的判断中 } } } int main(){ cin>>n>>m; for(int i=1;i<=m;i++){//将景点与景点之间的距离用一个数组去存 int a,b; cin>>a>>b; cin>>mp[a][b]; mp[b][a]=mp[a][b]; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(mp[i][j]!=0){//如果这个数组不为空就去搜索 dfs(i,j); memset(vis,0,sizeof(vis));//清空标记 s=0;//将暂存变量S清零 } } } cout<<ans; return 0; }
复制代码

 

复制代码
#include <cstdio> #include <iostream> using namespace std; const int N =55; int head[N << 1], cnt, n, m, ans, sum; bool vis[N]; struct node{ int nxt, to, w; }e[N]; int read() { int s = 0, w = 1; char ch = getchar(); while(!isdigit(ch)) {if(ch == '-') w = -1;ch = getchar();} while(isdigit(ch)) {s = s * 10 + ch - '0';ch = getchar();} return s * w; } void add(int x, int y, int z) { e[++cnt].nxt = head[x]; e[cnt].to = y; e[cnt].w = z; head[x] = cnt; } void dfs(int x) { for(int i = head[x]; i; i = e[i].nxt) if(!vis[e[i].to]) { vis[e[i].to] = 1; ans += e[i].w; sum = max(sum, ans); dfs(e[i].to); ans -= e[i].w; vis[e[i].to] = 0; } } int main() { n = read(), m = read(); while(m--) { int x, y, z; x = read(), y = read(), z = read(); add(x, y, z), add(y, x, z); } for(int i = 1; i <= n; i++) vis[i] = 1, dfs(i), vis[i] = 0; printf("%d\n", sum); return 0; }
复制代码

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16556784.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示