我正在努力解决我被给予的问题:
输出:
问题:
我的距离地图只存储一个随机的未知数字。
我的输入是:
5
5 6
0 1 1
0 2 2
1 2 5
1 3 1
3 2 2
2 4 3
4 5
1 0 91
2 0 50
2 1 849
3 0 451
3 1 724
8 25
1 0 91
2 0 176
2 1 658
3 0 61
3 1 740
4 0 21
4 1 817
4 2 407
4 3 469
5 0 468
5 1 493
5 2 400
5 3 814
5 4 86
6 0 611
6 1 457
6 2 776
6 4 452
6 5 4
7 0 601
7 2 722
7 3 11
7 4 249
7 5 530
7 6 632
9 9
1 0 64
3 1 914
4 1 331
4 2 824
5 3 509
7 5 520
7 6 460
8 1 415
8 7 263
3 2
1 0 533
2 1 920
第一个数字是测试用例的数量,然后对于每个测试用例,我有顶点数和边数,接着是顶点数(表示边的2个)和相应的权重。
示例:
testcases
no_vert no_edges
node_1 node_2 weight_1
node_2 node_3 weight_2
ect....
输出:是生成树的权重以及第一个节点和最远节点之间的距离:
7 5
592 451
450 176
3386 1262
1453 1453
因此,我得到的不是正确的输出:
7 5
592 2147483647
450 2147483647
3386 2147483647
这意味着我的dijkstras方法存在问题。我不是有错误的地方,我假设它是距离向量,但在哪里?
这是我的代码
//============================================================================
// Name : boost_ex_1.cpp
// Author : priya
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include<vector>
#include<algorithm>
#include<boost/graph/adjacency_list.hpp>
#include<boost/graph/prim_minimum_spanning_tree.hpp>
#include<boost/graph/dijkstra_shortest_paths.hpp>
#include<boost/graph/kruskal_min_spanning_tree.hpp>
using namespace std;
using namespace boost;
typedef adjacency_list<vecS, vecS, directedS, no_property,property<edge_weight_t, int> > Graph;
//vertex and edge descriptor
typedef graph_traits<Graph>::vertex_descriptor Vertex;
typedef graph_traits<Graph>::edge_descriptor Edge;
int testcases();
int main() {
ios_base::sync_with_stdio(false);
int n=0;
cin>>n;
while(n--)
{
testcases();
}
return 0;
}
int testcases()
{
//creation of graphs
//get number of edges and vertices
int NEDGES,NVERT;
cin>>NVERT>>NEDGES;
//graph g
Graph g(NVERT);
Vertex SOURCE=0;
int a,b,c;
//property map for edge weights
property_map<Graph,edge_weight_t>::type weightMap = get(edge_weight,g);
//fill graph details in g
for(int i=0;i<NEDGES;++i)
{
cin >> a >> b >> c;
bool success;
Edge e;
tie(e,success) = add_edge(a,b,g);
weightMap[e]=c;
}
//filled graph with edges and vertices and weight in weightMap
vector<Edge> spanning_tree;
kruskal_minimum_spanning_tree(g,back_inserter(spanning_tree));
a=0;
for(vector<Edge>::iterator ei=spanning_tree.begin();ei!=spanning_tree.end();++ei)
{
a+=weightMap[*ei];
}
vector<int>distancep(NVERT); //distance ebtween nodes
dijkstra_shortest_paths(g,SOURCE,distance_map(&distancep[0]));
b=0;
for(int i=0;i<num_vertices(g);++i)
{
b=max(b,distancep[i]);
}
cout << a <<" "<< b << endl;
return 0;
}
如果有人能帮助我,我将非常感激。
谢谢。
编辑:: 此外,正如您在我的输出中所看到的,最后一个输出缺失,我也无法找出原因。谢谢
答案 0 :(得分:2)
我想发布答案,以防有人遇到同样的问题。
所以,第一个问题是while循环应该是
while(n--)
不会强>
while(--n)
它错过了输入的测试用例。
其次,我已将grah声明为directedS
,这是错误的,应该是undirectedS
,而给出了随机距离值,因为距离的值是空的。 强>