您的位置:首页 > 编程语言 > C语言/C++

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

2013-11-04 10:57 686 查看
输入说明:第一个输入参数为测试样例个数

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: