c++递归实现关于无向图中任意两点的最短距离
2013-11-04 10:57
686 查看
输入说明:第一个输入参数为测试样例个数
第二个输入参数n为图的边数
接下来的n行输入为x,y,length,表示节点x到节点y的距离length
第二个输入参数n为图的边数
接下来的n行输入为x,y,length,表示节点x到节点y的距离length
#include <string.h> #include <iostream> #include <memory.h> #include <string> #include <vector> using namespace std; bool visited[101]; int min_length = 1000000; int start; int enddes; struct Node { int child; int des; Node(int a,int b) { this -> child = a; this -> des = b; } Node(){} }; vector<Node> data[101]; void dfs(int node,int length) { visited[node] = true; if(node == enddes - 1) { if(length < min_length) min_length = length; return; } for(int i = 0;i < data[node].size();i++) { if(!visited[data[node][i].child]) { visited[data[node][i].child] = true; length += data[node][i].des; dfs(data[node][i].child,length); length -= data[node][i].des; visited[data[node][i].child] = false; } } } int main() { int c; cin >> c; while(c--) { int n; int st,ed,des; memset(visited,false,sizeof(visited)); cin >> n; for(int i = 0;i < n;i++) { cin >> st >> ed >> des; data[st - 1].push_back(Node(ed - 1,des));//因为是无向图,所以两节点互为父子节点 data[ed - 1].push_back(Node(st - 1,des)); } cin >> start >> enddes; int length = 0; dfs(start - 1,length); for(int i = 0;i < n;i++) data[i].clear(); cout << min_length << endl; min_length = 1000000; } return 0; }
相关文章推荐
- Matalab代码 实现 Dijkstra求 有向图及无向图之间,任意两点之间的最短路径
- Floyd 任意两点间的最短距离 dp
- 图论03——改进的任意两点间最短距离及路径
- 任意两点间最短路径算法实现
- c++中关于最短路径问题的Dijkstra算法的实现
- 《C++第七周实验报告2-1》---利用成员函数、友元函数和一般函数,实现三个版本的求两点间距离的函数
- HDU 4460 求任意两点最短距离的最大距离
- C++ 用类实现point 两点的距离
- 每对顶点间的最短距离 稀疏有向图Johnson算法 采用邻接表C++实现
- 通过C++实现判断点与多边形的关系和两点之间的距离
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- C/C++中关于递归的实现细节的总结
- 关于已知两点经纬度求球面最短距离的公式推导
- 关于已知两点经纬度求球面最短距离的公式推导
- 已知有向图任意两点的最短距离,求最小边数
- c++实现根据地图上两点经纬度计算两点间实际距离
- 任意两点间最短距离floyd-warshall ---- POJ 2139 Six Degrees of Cowvin Bacon
- 我对弗洛伊德算法的理解(求图中任意两点之间最短距离)
- 【数据结构与算法】二叉树给定两个节点的最短距离(C++实现)
- 关于已知两点经纬度求球面最短距离的公式推导