void runAlgorithm(Algorithm a) { int *mind; clock_t beg, end; double time_spent; int last, dist; last=vertex_count - 1; beg = clock(); if(a == AUCTION) { mind = auction_distance ( adj_matrix, 0 ); } else { mind = dijkstra_distance ( adj_matrix ); } end = clock(); time_spent = (double)(end - beg) / CLOCKS_PER_SEC; if(a == AUCTION) { log(INFO, -1, "Auction execution time: %f s", time_spent); auct_time=time_spent; auct_dist=mind[last]; dist=auct_dist; } else { log(INFO, -1, "Dijkstra execution time: %f s", time_spent); dijk_time=time_spent; dijk_dist=mind[last]; dist=dijk_dist; } if (dist != INT_MAX) { log(INFO, -1, "Minimum distance from node 0 to node %d equals %d", last, dist); valid=1; } else { log(INFO, -1, "Can't reach node %d from node 0!", last); } free ( mind ); }
int main ( int argc, char **argv ) /******************************************************************************/ /* Purpose: MAIN runs an example of Dijkstra's minimum distance algorithm. Discussion: Given the distance matrix that defines a graph, we seek a list of the minimum distances between node 0 and all other nodes. This program sets up a small example problem and solves it. The correct minimum distances are: 0 35 15 45 49 41 Licensing: This code is distributed under the GNU LGPL license. Modified: 01 July 2010 Author: Original C version by Norm Matloff, CS Dept, UC Davis. This C version by John Burkardt. */ { int i; int i4_huge = 2147483647; int j; int *mind; int ohd[NV][NV]; timestamp ( ); fprintf ( stdout, "\n" ); fprintf ( stdout, "DIJKSTRA_OPENMP\n" ); fprintf ( stdout, " C version\n" ); fprintf ( stdout, " Use Dijkstra's algorithm to determine the minimum\n" ); fprintf ( stdout, " distance from node 0 to each node in a graph,\n" ); fprintf ( stdout, " given the distances between each pair of nodes.\n" ); fprintf ( stdout, "\n" ); fprintf ( stdout, " Although a very small example is considered, we\n" ); fprintf ( stdout, " demonstrate the use of OpenMP directives for\n" ); fprintf ( stdout, " parallel execution.\n" ); /* Initialize the problem data. */ init ( ohd ); /* Print the distance matrix. */ fprintf ( stdout, "\n" ); fprintf ( stdout, " Distance matrix:\n" ); fprintf ( stdout, "\n" ); for ( i = 0; i < NV; i++ ) { for ( j = 0; j < NV; j++ ) { if ( ohd[i][j] == i4_huge ) { fprintf ( stdout, " Inf" ); } else { fprintf ( stdout, " %3d", ohd[i][j] ); } } fprintf ( stdout, "\n" ); } /* Carry out the algorithm. */ mind = dijkstra_distance ( ohd ); /* Print the results. */ fprintf ( stdout, "\n" ); fprintf ( stdout, " Minimum distances from node 0:\n"); fprintf ( stdout, "\n" ); for ( i = 0; i < NV; i++ ) { fprintf ( stdout, " %2d %2d\n", i, mind[i] ); } /* Free memory. */ free ( mind ); /* Terminate. */ fprintf ( stdout, "\n" ); fprintf ( stdout, "DIJKSTRA_OPENMP\n" ); fprintf ( stdout, " Normal end of execution.\n" ); fprintf ( stdout, "\n" ); timestamp ( ); return 0; }