Untitled
unknown
plain_text
a year ago
2.0 kB
3
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