Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: heap  (Citit de 5559 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
deneo
Vorbaret
****

Karma: 185
Deconectat Deconectat

Mesaje: 160



Vezi Profilul
« : Aprilie 06, 2011, 09:58:32 »

cum sa fac un heap care sa aiba sortate elementele crescator (cu STL)?
am incercat asa dar vad ca nu merge (sau debuggerul face figuri)
priority_queue< int, deque<int>, less<int> > t;

si inca o intrebare... cum introduc un element in heap daca lucrez cu structuri
(adica avem un struct nod { int a; int b } pe care este definit heapul) fara sa folosesc o variabila a de tip nod ?

ms Very Happy

Memorat
skull
Client obisnuit
**

Karma: 17
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #1 : Aprilie 06, 2011, 10:11:10 »

Cod:
struct cmp
{
    bool operator()(const int &a,const int &b) const
    {
        return cost[a]<cost[b];
    }
};
priority_queue<int, vector<int>, cmp> Q;

Ce motive ai sa nu folosesti o variabila de tip nod?
Memorat
deneo
Vorbaret
****

Karma: 185
Deconectat Deconectat

Mesaje: 160



Vezi Profilul
« Răspunde #2 : Aprilie 06, 2011, 10:18:58 »

Cod:
struct cmp
{
    bool operator()(const int &a,const int &b) const
    {
        return cost[a]<cost[b];
    }
};
priority_queue<int, vector<int>, cmp> Q;
asta stiam si eu sa fac.
scuze nu m-am exprimat bine am vrut sa zic folosind o functie de tipul greater<int>, less<int> etc. care sunt incluse in STL
(adica fara a ma complica cu un cmp Smile )

Ce motive ai sa nu folosesti o variabila de tip nod?
Pai fiindca folosind o variabila in plus scrii mai multe linii de cod si te complici. (adica orice plus e binevenit, asa-i ?  Very Happy )
Memorat
skull
Client obisnuit
**

Karma: 17
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #3 : Aprilie 06, 2011, 10:30:03 »

Ai putea folosi pair<> daca ai doar 2 variabile in structura si poti face push cu make_pair. Altcumva nu cred ca ai cum, cel putin eu nu stiu. Cat despre heap, nici acolo n-am alta idee, da' nu vad un mare efort sa faci cmp-ul, oricum face STL-ul destule.  Very Happy
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #4 : Aprilie 06, 2011, 12:31:52 »

cum sa fac un heap care sa aiba sortate elementele crescator (cu STL)?
am incercat asa dar vad ca nu merge (sau debuggerul face figuri)
priority_queue< int, deque<int>, less<int> > t;

si inca o intrebare... cum introduc un element in heap daca lucrez cu structuri
(adica avem un struct nod { int a; int b } pe care este definit heapul) fara sa folosesc o variabila a de tip nod ?

ms Very Happy



La primul punct, cred ca asta e ceea ce vrei:

Cod:
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

priority_queue<int, vector<int>, greater<int> > Q;

int main ()
{
    Q.push (3);
    Q.push (8);
    Q.push (7);

    while (!Q.empty ())
    {
printf ("%d ", Q.top ());
Q.pop ();
    }

    return 0;
}

Iar la a 2a, poti sa faci un constructor in structura si apoi sa ii spui Q.push (nod (1, 2));
Sau, mai simplu: Q.push ((nod) {1, 2});   (fara sa mai scrii constructor)
« Ultima modificare: Aprilie 06, 2011, 12:47:27 de către Mircea Dima » Memorat
deneo
Vorbaret
****

Karma: 185
Deconectat Deconectat

Mesaje: 160



Vezi Profilul
« Răspunde #5 : Aprilie 06, 2011, 13:10:01 »

ms ... asta cautam  Very Happy
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #6 : Aprilie 09, 2011, 12:28:12 »

Faci cast.
Cod:
Q.push((nod){a,b});
Memorat
deneo
Vorbaret
****

Karma: 185
Deconectat Deconectat

Mesaje: 160



Vezi Profilul
« Răspunde #7 : Mai 02, 2011, 11:34:43 »

mai am o intrebare, cum declar un min-heap (ordonarea trebuie sa fie dupa primul element) de perechi ( pair <int, int> ) folosind priority_queue?
nu doresc variante alternative ca alea cam stiu si eu sa le fac Smile
Memorat
dushmi
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« Răspunde #8 : Mai 02, 2011, 12:00:39 »

pai, ceva de genu
Cod:
priority_queue <pair <int, int>, vector <pair <int, int> >, greater <pair <int, int> > > H;

In cazul in care first-urile a doua pair-uri sunt egale, le tine si crescator dupa a second-uri
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines