Untitled

 avatar
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