Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C/C++] Grafi: riconoscere nodi in serie e parallelo....importante!!

    Ciao a tutti!

    Mi potete aiutare a svolgere questo programma in C(va benissimo pure in C++ )...

    Dovrei fare in modo che chiesti in input: per prima cosa quanti archi dovranno formare il grafo e poi successivamente ogni arco con i suoi estremi(A-B B-C C-D ecc.. fino al numero scelto all'inizio).

    Se ad es pero' scrivo B-C due volte ci saranno due archi in parallelo e cosi' via...

    Cioè il programma deve riconoscere se gli archi sono in parallelo o in serie e scrivelo in output....

    Grazie mille e vi prego aiutatemi è importante

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  2. #2
    Up


    vi prego aiutatemi

    grazie mille ancora
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  3. #3
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Non mi intendo di grafi, tuttavia qualche idea, senza codice, te la posso dare.

    Tu chiedi all'utente un numero pari di punti.
    Li memorizzi in un vettore di strutture del tipo:
    codice:
    #define MAX 100
    struct arco {
        char P1, P2;
    } grafo[MAX];
    E poi esegui i controlli con diverse funzioni.

    codice:
    void trovaparalleli()
    {
        int i,j;
        struct arco a;
        bool skip[MAX]; // da inizializzare
    // n = numero di archi
        for(i=0; i<n; i++) {
            if(skip[i]) continue;
            a = grafo[i];
            for(j=i + 1; j<n; j++) {
                if(a == grafo[j]) {
                    cout << "L'arco " << i << " è in parallelo con " <<j << endl;
                    skip[j] = true;
                }
            }
        }
    }

    Questo codice non è testato ed è parecchio da perfezionare, ma non ho tempoo!!!

    Per quelli in serie il codice è simile.
    codice:
    void trovaparalleli()
    {
        int i,j;
        struct arco a;
        bool skip[MAX]; // da inizializzare
    // n = numero di archi
        for(i=0; i<n; i++) {
            if(skip[i]) continue;
            a = grafo[i];
            for(j=i + 1; j<n; j++) {
                if(a.P2 == grafo[j].P1) {
                    cout << "L'arco " << i << " è in serie con " <<j << endl;
                    skip[j] = true;
                    a = grafo[j];
                }
            }
        }
    }
    Mi raccomando, tratta questo codice come un'idea, algoritmo, non alla lettera!

    E poi devo ammettere di non aver capito molto della tua spiagazione!!

    Vabbè spero che almeno alla lontana sia giusto, è buttato giù in 2 minuti!

  4. #4
    Grazie mille

    adesso lo provo e ti faccio sapere...

    Cmq ti rispiego il programma...

    Chiedo all'utente quanti archi vuole inserire....

    Poi l'utenbte ad es digita A-B B-C C-D (i nodi cioè digita) e in questo caso il programma risponde che sono in SERIE..

    Se l'utente avesse scritto A-B B-C B-C direbbe che sono in parallelo..

    Ah importante: lo potrei risolvere anche con altre tecniche che non siano i grafi-alberi... anche con matrice...se mi potresti aiutare in questa seconda opportunità te ne sarei grato..

    Fammi sapere
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  5. #5
    Utente di HTML.it L'avatar di JamesD
    Registrato dal
    Oct 2001
    Messaggi
    415
    Ti crei una matrice, che tecnicamente dovrebbe chiamarsi matrice delle incidenze del grafo, che riporta sulle colonne i lati del grafo e sulle righe i nodi. Ad ogni intersezione metti:

    -se i rami sono orientati
    1 se quel lato entra in quel nodo e -1 se quel lato esce dal nodo
    0 se lato e nodo non si toccano

    -se non ti interessa il verso di percorrenza
    1 se si toccano
    0 se non si toccano

    Per controllare la serie:
    se in un nodo affluiscono due e solo due lati allora detti lati sono in serie e questo controllo lo puoi fare su tutti i nodi facilmente controllando quali righe della matrice presentano due 1

    Per controllare il parallelo:
    se due lati hanno in comune i due nodi cioè hanno entrambi 1 sulle stesse due righe sono in parallelo

    Provo a fare un esempio

    codice:
       a   b   c   d
    n1 1   0   0   1
    n2 1   1   1   0
    n3 0   0   0   1
    n4 0   1   1   0
    Dall'esempio emerge che a e d sono in serie e b e c sono in parallelo ma anche in serie.

  6. #6
    Originariamente inviato da JamesD
    Ti crei una matrice, che tecnicamente dovrebbe chiamarsi matrice delle incidenze del grafo, che riporta sulle colonne i lati del grafo e sulle righe i nodi. Ad ogni intersezione metti:

    -se i rami sono orientati
    1 se quel lato entra in quel nodo e -1 se quel lato esce dal nodo
    0 se lato e nodo non si toccano

    -se non ti interessa il verso di percorrenza
    1 se si toccano
    0 se non si toccano

    Per controllare la serie:
    se in un nodo affluiscono due e solo due lati allora detti lati sono in serie e questo controllo lo puoi fare su tutti i nodi facilmente controllando quali righe della matrice presentano due 1

    Per controllare il parallelo:
    se due lati hanno in comune i due nodi cioè hanno entrambi 1 sulle stesse due righe sono in parallelo

    Provo a fare un esempio

    codice:
       a   b   c   d
    n1 1   0   0   1
    n2 1   1   1   0
    n3 0   0   0   1
    n4 0   1   1   0
    Dall'esempio emerge che a e d sono in serie e b e c sono in parallelo ma anche in serie.
    Grazie mille..saresti cosi' gentile da scrivermi codice(C o C++ è lo stesso..) che faccia quanto mi hai detto?? ti prego è importantissimo
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  7. #7

    Up

    Up

    aiutatemi ...grazie mille

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.