I grafi

di il
37 risposte

37 Risposte - Pagina 2

  • Re: I grafi

    O forse devo creare un vettore o meglio un array di struct?
    Struct computer
    {
    int codice[10];
    int dim[10};
    ......
    }
    computer vet[20]
    quindi cosi avrei i miei nodi tutti in questo array di struct e poi da ogni elemento iesimo dell'array che sarebbe un singolo nodo punto alla lista dei suoi adiacenti.
    Se fosse cosi ho un picoolo dubbio nella lista il primo elemento ha un puntatore la parte info e il succ giusto? ma se il mio array contiene una struct di tipo nodo come aggancio il puntatore della lista?
  • Re: I grafi

    Allora forse ho capito cambio il nome alla struttura
    Struct nodo
    {
    int codice[10];
    int dim[10};
    ......
    }
    nodo vet[20]
    ok adesso per far puntare ognio elemento del mia array di struct alla sua lista adiacenti
    dovrei fare
    computer *vett avendo allocato prima la lista dei computer
  • Re: I grafi

    Azzerra un attimo tutto e segui il mio raggionamento.
    Allora leggiamo attentamente l'esercizio:
    In un laboratorio vi sono n personal computer, ciascuno individuato da un codice ed associato ad alcune informazioni come la dimensione della memoria RAM, l’elenco degli hard disk installati( ciascuno individuato da un codice e caratterizzato da una capacità e da un tempo di accesso) e l’indicazione della possibile presenza di un modem.
    Da questo capiamo che abbiamo a che fare con diverse strutture e precisamente:
    
    // HD
    struct _hd
    {
       int codice;
       int capacita;
       int temp_accesso;
    };
    
    // PC
    struct _computer
    {
       int codice;
       int memoria_ram;
       _hd * hard_disk_installati;//puntatore perche non sai a priori quanti hd ci sono
       bool modem;
    };
    
    Prosseguiamo
    Due pc possono essere connessi da un collegamento dati peer -to –peer .Ogni collegamento è bidirezionale e caratterizzato da un ritardo di trasmissione.
    Da questo si capisce che abbiamo a che fare con un grafo pesato quindi prosseguiamo con la stesura del codice
    
    struct lista_add
    {
       computer *pc;
       int latenza;
       lista_add *next;
    };
    
    Adesso dobbiamo assemblare il tutto. In sostanza dobbiamo includere la lista delle addiacenze nello struct computer cioè
    
    // PC MODIFICATO
    struct _computer
    {
       int codice;
       int memoria_ram;
       _hd * hard_disk_installati;
       bool modem;
      lista_add *listaAddiacenze; //puntatore perche non sai quanti elementi ci sono
    };
    
    Il vettore dei PC non è altro che un vettore di struct computer
    
    //se N è definito a priori
    _computer vettore_PC[N];
    
    //se N è ignoto(dinamico)
    _computer *vettore_PC;
    
    Il tutto ti diventa più facile se avessi imparato le classi STL e più precisamente std::vector e/o std::list. Infine se guardi attentamente la stesura vedrai che questo codice è analogo al codice che ti ho indicato nel thread precedente.
  • Re: I grafi

    Ti ringrazio della tua risposta esaustiva e del codice che hai scritto per me e ti invidio per la tua bravura
    Ti volevo comunque dire che l'esempio di codice che io avevo scritto era riferito al caso generale dellacrappresentazione del grado ecco perché volevo sapere se era giusto.
    Poi ho un altro dubbio come faccio a sapere da computer *pc che pc e un vettore se non ce la struttura che lo iniziativa?????
    Scusa le mie domande stupide
  • Re: I grafi

    Computer *pc non é un vettore, é semplicemente un puntatore ad una struttura computer. Se vedi la rappresentazione del grafo vedrai che la struttura lista_ add non é altro che l'arco di collegamento tra un pc all'altro. Infine la variabile liasta_addiacenze sará appunto la lista delle addiacenze di un ipotetico pc ovvero la lista di tutti i suoi collegamenti con gli altri pc. Addesso che ci penso possiamo modificare il campo computer *pc in: int codice_pc in quanto ci serve sapere solo il codice del pc per costruire la lista.
  • Re: I grafi

    Scusa mi sono espresso male so che computer*pc indica un puntatore ma pc e un vettore?? Più precisamente di struct
  • Re: I grafi

    Cioè se inixializzo un vettore di staruct faccio
    Suct computer
    {
    Int codice;
    Int dim ;
    .......
    };
    Computer pc[]
  • Re: I grafi

    Quello é un vettore di dimensione ignota ovvero é uguale all Computer *pc. Mettendo le parentesi quadre enfatizzi il fatto che é un vettore e non un puntatore
  • Re: I grafi

    Nn riesco ad immaginare il tutto graficamente
  • Re: I grafi

    Appena ho un pò di tempo di faccio la rappresentazione grafica.
  • Re: I grafi

    Te ne sarei molto grato ho una confusione in testa da emicrania e mi rimane poco tempo per l'esame
  • Re: I grafi

    Ciao non ti voglio mettere fretta ma se avessi quel grafico potrei focalizzare meglio il tutto grazie ancora
  • Re: I grafi

    Ecco il grafico in pdf.
    http://depositfiles.com/files/twjsl6p5

    L'ho fatto a mano perche non sono una cima col programmi grafici. Spero che si capisca.
  • Re: I grafi

    Non so come ringraziarti sei stato grande e non lo dico tanto per dire sei veramente bravo nel settore.Ti devo fare un ulteriore domanda a proposito della lista adiacenze mi chiedevo non e altro che la lista dei computer che sono adiacenti ad un singolo computer quindi e una lista di struct di tipo computer allora perche nella struct metti solo int codice int latenza e lista_add*next e non metti gli altri dati tipo codice etc.. visto che creiamo una lista di computer adiacenti.
    Non so se ho reso l'idea vedi sono queste "sfaccettature" che mi confondono
  • Re: I grafi

    Perche il codice PC è univoco e basta una ricerca nel vettore per scoprire il computer addiacente a quello in questionbe. Una volta che ho l'indirizzo del PC addiacente posso vedere le sue proprietà.
    Una funzione di qeusto tipo potrebbe fare ciò che dico
    
    _computer * TrovaPc(int codice_pc)
    {
      for(int i = 0; i < N; i++)
      {
        if(v[i].codice_pc == codice_pc)
              return &v[i];
      }
      return NULL;
    }
    
Devi accedere o registrarti per scrivere nel forum
37 risposte