1.Shortest path in multistage graphs. Find the shortest path from 0 to 15 for the following graph.
A multistage graph is a graph (1) G=(V,E) with V partitioned into K >= 2 disjoint subsets such that if (a,b) is in E, then a is in Vi , and b is in Vi+1 for some subsets in the partition; and (2) | V1 | = | VK | = 1.
#include<iostream> #include<sstream> #include<string> #include<fstream> usingnamespace std; #define MAX 128 #define HUGE 9999 struct Item...{ int i,j; int v; }; Item A[MAX];//三元组元素 void print(int* s,int end) ...{ if(s[end] ==0) ...{ cout << end <<"->"; return; } print(s,s[end]); cout << end <<"->"; } void PrintPath(int* s,int length) ...{ cout << s[0] <<"->"; print(s,length-1); cout <<"Shortest path!"<< endl; } int main() ...{ string str; int i,j,v; int Alen =0; ifstream cin("4.txt"); while(getline(cin,str)) ...{ istringstream stream(str); stream>>i>>j>>v; A[Alen].i = i; A[Alen].j = j; A[Alen].v = v; Alen++; } int size = A[Alen-1].j +1; int* B =newint[size];//B[i]表示节点0到节点i的权值 int* S =newint[size]; //S[i]表示节点i的前驱 // memset(B,HUGE,size); // memset(S,0,size); for(int p =0; p < size;p++) ...{ B[p] = HUGE; S[p] =0; } B[0] =0; cout <<endl; for(int index =0; index < Alen;index++) ...{ if(A[index].v + B[ A[index].i ] < B[ A[index].j ]) ...{ B[ A[index].j ] = A[index].v + B[ A[index].i ]; S[ A[index].j ] = A[index].i; } } for( p =0; p < size;p++) cout << S[p] <<""; cout <<endl; for(p =0; p < size;p++) cout << B[p] <<""; cout << endl; PrintPath(S,size); return0; }
1. Shortest path in multistage graphs. Find the shortest path from 0 to 15 for the following graph.A multistage graph is a graph (1) G=(V,E) with V partitioned into K >= 2 disjoint subsets such tha