Каково значение массива ключей в этой статье? - PullRequest
0 голосов
/ 04 апреля 2020

Я пытался понять алгоритм простых чисел, я понял значение функции isMST (для остановки циклов в связующем дереве). Но я не понял, зачем нам нужен этот массив ключей?

Этот код является частью полной статьи в geeksforgeeks. Ссылка (https://www.geeksforgeeks.org/prims-algorithm-using-priority_queue-stl/)

void Graph::primMST() 
{ 
priority_queue< iPair, vector <iPair> , greater<iPair> > pq; 

int src = 0; // Taking vertex 0 as source 

// Create a vector for keys and initialize all 
// keys as infinite (INF) 
vector<int> key(V, INF); 

// To store parent array which in turn store MST 
vector<int> parent(V, -1); 

// To keep track of vertices included in MST 
vector<bool> inMST(V, false); 

// Insert source itself in priority queue and initialize 
// its key as 0. 
pq.push(make_pair(0, src)); 
key[src] = 0; 

/* Looping till priority queue becomes empty */
while (!pq.empty()) 
{ 
    // The first vertex in pair is the minimum key 
    // vertex, extract it from priority queue. 
    // vertex label is stored in second of pair (it 
    // has to be done this way to keep the vertices 
    // sorted key (key must be first item 
    // in pair) 
    int u = pq.top().second; 
    pq.pop(); 

    inMST[u] = true;  // Include vertex in MST 

    // 'i' is used to get all adjacent vertices of a vertex 
    list< pair<int, int> >::iterator i; 
    for (i = adj[u].begin(); i != adj[u].end(); ++i) 
    { 
        // Get vertex label and weight of current adjacent 
        // of u. 
        int v = (*i).first; 
        int weight = (*i).second; 

        //  If v is not in MST and weight of (u,v) is smaller 
        // than current key of v 
        if (inMST[v] == false && key[v] > weight) 
        { 
            // Updating key of v 
            key[v] = weight; 
            pq.push(make_pair(key[v], v)); 
            parent[v] = u; 
        } 
    } 
} 


// Print edges of MST using parent array 
for (int i = 1; i < V; ++i) 
    printf("%d - %d\n", parent[i], i); 

 } 

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...