sicily 1024之递归与局部变量
来源:互联网 发布:mac 电视直播 编辑:程序博客网 时间:2024/06/05 04:12
题目在这里点击打开链接。这道题求解的时候,我参考了这个代码点击打开链接
这是一道深搜的题目。刚开始看题就在纠结使用广搜还是深搜(也许是写的题不多,反应没那么快),后来发现广搜的话会给统计总距离带来很大的不变,而深搜可以利用递归和局部变量来很容易的解决。
阅读题目,发现有这么几个重点:1、城市是连通的,2、n个城市只有n-1条道路,那么是一个连通无环图。再加上n-1条道路,那么这是一颗树,可以把给出的capital作为树的根,进行深度搜索。
这道题的重点就是利用递归和局部变量,精简了很多费事的判断。
#include <iostream>#include <cstring>#include <vector>using namespace std;struct Node{int m_city_x;int m_city_y;int m_weight;Node(int city_x, int city_y, int weight){m_city_x = city_x;m_city_y = city_y;m_weight = weight;}};vector<Node> MI[10001];bool color[10001];int longest;void dfs(int start, int dist){bool deeper = false;color[start] = true;for (vector<Node>::iterator iter = MI[start].begin(); iter != MI[start].end(); iter++){if (color[iter->m_city_y] != true){deeper = true;dfs(iter->m_city_y, dist + iter->m_weight);}}MI[start].clear();color[start] = false;if (deeper == false && dist > longest)longest = dist;return;}int main(){int N, K, X, Y, D;Node *p;while (cin >> N >> K){N--;while (N--){cin >> X >> Y >> D;MI[X].push_back(Node(X, Y, D));MI[Y].push_back(Node(Y, X, D));}memset(color, false, sizeof(color));longest = 0;dfs(K, 0);cout << longest << endl;}//system("pause");return 0;}代码的重点1、dfs函数中deeper的运用,精简了判断某一节点是否是叶子节点的部分;2、dfs的第二个参数dist,这个运用可以恰当的保存每次迭代的总距离,从而在我们搜索到叶子的时候,也就得到了树根到叶子的距离
当然,这道题还有一个要注意的就是clear操作,毕竟不是一组数据,是很多组数据。写的时候就没注意clear, 导致给了TLE,想想也是必然的,因为数据越来越多,你不清楚,说不定就会造成死循环或者其他的耗时搜索
0 0
- sicily 1024之递归与局部变量
- 全局与局部变量及递归
- cocos2d-Lua之局部变量与全局变量
- python学习之全局变量与局部变量
- python--函数局部变量+递归
- JAVA问题总结之18-成员变量与局部变量
- sicily 1029之递归超时
- 全局变量与局部变量
- 局部变量与全局变量
- 全局变量与局部变量
- 事务与局部变量
- 全局变量与局部变量
- 全局变量与局部变量
- 全局变量与局部变量
- 全局变量与局部变量
- 全局变量与局部变量
- 全局变量与局部变量
- 全局变量与局部变量
- 天将降大任于斯人
- wget 下载整个网站,或者特定目录
- Android菜单介绍
- Android平台播放语音时支持听筒、喇叭之间切换
- nginx 变量解析
- sicily 1024之递归与局部变量
- 网剧《大长腿》走红 网友:请自备避雷针
- POJ 3343 Against Mammoths
- 位操作小技巧
- 敌兵布阵(树状数组)
- poj 2528 (线段树_离散化)
- KVO的概述与使用
- 计蒜客学习之旅--1--A+B+C问题
- UVa 11609 - Teams