Untitled
unknown
plain_text
9 months ago
2.0 kB
1
Indexable
const int V = 20; const int MINUS_ONE = -1; int BFPrevValue[20]; int BFPrev[V]; int BFValue[V]; int getIntVertex(char vertex){ return vertex > 'a' ? vertex - 'a' : vertex - 'A'; } char getCharVertex(int vertex) { return vertex + 'A'; } int traveling() { } void copyBFToBF(int BFValue[V], int BFPrevValue[V]) { for (int i = 0; i < V; i++) { BFPrevValue[i] = BFValue[i]; } } void BF(int G[V][V], int numOfVertices, char start_vertex, int BFValue[V], int BFPrev[V]) { BFValue[getIntVertex(start_vertex)] = 0; copyBFToBF(BFValue, BFPrevValue); for (int src = 0; src < numOfVertices; src++) { for (int dest = 0; dest < numOfVertices; dest++){ if (G[src][dest] != 0 && BFPrevValue[src] != MINUS_ONE) { if (BFPrevValue[dest] == MINUS_ONE && BFPrev[dest] == MINUS_ONE) { BFValue[dest] = BFPrevValue[src] + G[src][dest]; BFPrev[dest] = src; } else if (BFPrevValue[src] + G[src][dest] < BFValue[dest]) { BFValue[dest] = BFPrevValue[src] + G[src][dest]; BFPrev[dest] = src; } } } } } string BF_Path(int G[V][V], int numOfVertices, char start_vertex, char dest_vertex) { int BFValue[20]; int BFPrev[20]; for (int i = 0; i < V; i++) { BFPrev[i] = -1; BFValue[i] = -1; } for (int i = 0; i < numOfVertices; i++) { BF(G, numOfVertices, start_vertex, BFValue, BFPrev); } int src = getIntVertex(start_vertex), dest = getIntVertex(dest_vertex); string BFPath = ""; BFPath += dest_vertex; while (src != dest) { BFPath += " "; BFPath += getCharVertex(BFPrev[dest]); dest = BFPrev[dest]; } reverse(BFPath.begin(), BFPath.end()); return BFPath; }
Editor is loading...
Leave a Comment