[BGL] Troubles with floyd_warshall_all_pairs, johnson_all_pairs

Hi, guys!
I'm stumbled upon a weird problem using SUBJ. functions!
Lets suppose that we don't know how much Vertexes we are going to have (for
instance Vertexes might be got from file or stdin). So then, in my opinion,
is completely impossible to execute SUBJ functions!
Let me explain:
===============
int xx;
//"xx" is runtime-defined vertices size.
double* cmat=new(xx*xx);
//"cmat" is adjacency matrix actually, it's also defined during runtime.
InitCmat(); //here I fill in "cmat" array
typedef adjacency_list

On Jul 2, 2007, at 6:26 AM, Alex Ivanov wrote:
//AFAIK it's impossible to declare array using directive below in runtime: double [xx][xx] D; //Compiler says the same: "C2057: expected constant expression" //even code: double [(const int)xx][(const int)xx] D; //won't work, so the only option left is to make a pointer: double* D = new [xx*xx] ;
//but both "floyd_warshall_all_pairs_shortest_paths" and "johnson_all_pairs_shortest_paths" are declared to take a reference, not a pointer, so you'll get multiple compile errors, if you try to compile like below:
floyd_warshall_all_pairs_shortest_paths(G, D);
The DistanceMatrix is expected to be subscripted twice, so you would
need something like:
typedef double* double_array;
double_array* D = new double_array[xx];
for (int i = 0; i < xx; ++i)
D[i] = new double [xx];
Or, you could use a vector of vectors:
vector

Hi, Doug!
Thanks a lot for your reply, you've solved my issue.
Best regards, Alex.
"Doug Gregor"
On Jul 2, 2007, at 6:26 AM, Alex Ivanov wrote:
//AFAIK it's impossible to declare array using directive below in runtime: double [xx][xx] D; //Compiler says the same: "C2057: expected constant expression" //even code: double [(const int)xx][(const int)xx] D; //won't work, so the only option left is to make a pointer: double* D = new [xx*xx] ;
//but both "floyd_warshall_all_pairs_shortest_paths" and "johnson_all_pairs_shortest_paths" are declared to take a reference, not a pointer, so you'll get multiple compile errors, if you try to compile like below:
floyd_warshall_all_pairs_shortest_paths(G, D);
The DistanceMatrix is expected to be subscripted twice, so you would need something like:
typedef double* double_array;
double_array* D = new double_array[xx]; for (int i = 0; i < xx; ++i) D[i] = new double [xx];
Or, you could use a vector of vectors:
vector
D(xx, vector<double>(xx)); - Doug
participants (2)
-
Alex Ivanov
-
Doug Gregor