Shortest path
In the g= graph (v,e), assuming that each edge e[i] is w[i], the shortest value from the vertex V0 to the remaining points is found.
#include "stdafx.h" #include <deque> #include <iostream>using namespace std; #define N 9#define MIN 1000000typedef struct{int vexnum, Arcnum;char vexs[n];int matirx[n][n];} Graph;graph g;//initialization diagram data//0---1---2---3---4---5---6---7---8---//A---B---C---D---E---F---g---H---I---void init Iate_graph () {//b, a-d, a-e g.matirx[0][1] = 10;g.matirx[1][0] = 10;g.matirx[0][3] = 5;g.matirx[3][0] = 5;g.matirx[0][4 ] = 7;g.matirx[4][0] = 7;//b-c g.matirx[1][2] = 18;g.matirx[2][1] = 18;//c-f g.matirx[2][5] = 3;g.matirx[5][2] = 3 ;//D-E, d-g g.matirx[3][4] = 9;g.matirx[4][3] = 9;g.matirx[3][6] = 25;g.matirx[6][3] = 25;//e-f, e-h g.matirx[4][5 ] = 1;g.matirx[5][4] = 1;g.matirx[4][7] = 14;g.matirx[7][4] = 14;//f-h, f-i g.matirx[5][7] = 8;g.matirx[7][5] = 8;g.ma TIRX[5][8] = 30;g.matirx[8][5] = 30;//g-h g.matirx[6][7] = 6;g.matirx[7][6] = 6;//h-i g.matirx[7][8] = 20;g.matirx [8] [7] = 20;} Deque<int>find_min_path (int m, int n, graph g) {int A[n] = {0};d eque<DEQUE<INT>>AA;DEQUE<INT>BB, pp, Minpath;int min = min;for (int i = 0; i < N; i++) if (G.matirx[m][i]) p P.push_back (i); Aa.push_back (PP);pp. Clear (); Bb.push_back (m); A[m] = 1;bb.push_back (aa[0][0]); a[aa[0][0]] = 1;aa[0]. Pop_front (); while (true) {while (Bb.back ()! = N) {for (int i = 0; i < n; i++) if (G.matirx[bb.back ()][i] && a[i] = = 0) Pp.push_back (i), if (Pp.empty ()) Break;bb.push_back (Pp.front ()), A[pp.front ()] = 1;pp.pop_front (); Aa.push_back (pp );pp. Clear ();} if (bb.back () = = n) {int sum = 0;for (int i = 0; i < bb.size ()-1; i++) sum + = g.matirx[bb[i]][bb[i + 1]];if (Sum < min ) {min = Sum;minpath = BB;}} A[bb.back ()] = 0;bb.pop_back (); while (Aa.back (). empty ()) {aa.pop_back (); A[bb.back ()] = 0;bb.pop_back (); if (Aa.empty () ) return Minpath;} Bb.push_back (Aa.back () [0]); a[aa.back () [0]] = 1;aa.back (). Pop_front ();}} int _tmain (int argc, _tchar* argv[]) {initiate_graph ();d eque<int>minpath=find_min_path (0, 8, g); System ("Pause") ; return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Shortest path problem