c++递归实现关于无向图中任意两点的最短距离

来源:互联网 发布:网络分线器怎样插网线 编辑:程序博客网 时间:2024/05/22 04:42

输入说明:第一个输入参数为测试样例个数

   第二个输入参数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;  }


原创粉丝点击