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

    Grafo orientato

    ciao ragazzi ho un problema....dovrei costruire un grafo orientato formato da nodi disposti nei punti a coordinate intere del piano cartesiano.Oltre alle operazioni relative alla de fizione del
    grafo (inserimento e cancellazione di nodi e archi, stampa) vengono richieste
    due operazioni: il calcolo dei cammini minimi tra un nodo speci ficato e tutti
    gli altri nodi, in modo tale che ogni cammino passi per un arco pre fissato, e il
    calcolo del piu grande insieme di nodi indipendenti, ovvero che non siano estremi di uno stesso arco.

    Ho dei problemi con l'implementazione.come inserisco i dati nel grafo...potete aiutarmi?

  2. #2
    P.S Il grafo dev' essere implementato in C.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,319

    Moderazione

    Hai dei problemi... quali?
    Non hai postato il codice che hai sviluppato, non hai detto dove riscontri i problemi, né quali siano questi problemi...

    Cerca di aggiungere queste informazioni, altrimenti sarà ben difficile aiutarti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    ciao...il problema principale è l'inserimento,dopo aver inserito un nodo richiamo la funzione stampagrafo() che mi dice che il grafo è vuoto,ma dovrebbe stampare l'elemento inserito.

    P.S i nodi creati possono essere verdi o rossi.

    #include <stdio.h>
    #include<stdlib.h>


    //definizione strutture

    typedef struct nodo {
    int x;
    int y;
    int n;
    char c;
    struct nodo *next;
    }nodo;


    typedef struct grafo {
    int num;
    nodo** s;
    }grafo;



    grafo *graf=NULL;

    nodo* list=NULL;



    grafo* crea(int n)
    {
    grafo *G;
    int i;
    G = (grafo*)malloc(sizeof(grafo));
    if (G==NULL)
    {
    printf("ERRORE: impossibile allocare memoria per il grafo\n");
    }
    else {
    G->s = (nodo**)malloc(n*sizeof(nodo*));
    if ((G->s==NULL) && (n>0))
    {
    printf("ERRORE: impossibile allocare memoria per la lista del grafo\n");
    free(G);
    G=NULL;
    }
    else {
    G->num = n;
    for (i=0; i<n; i++)
    {
    G->s[i]=NULL;
    }
    }
    }
    return(G);
    }


    nodo* creanodo(int x,int y,char c) /* alloca nuovo elemento */
    {
    int n=1;
    nodo* pt;
    if( pt->x==x && pt->y==y)
    {
    printf("ERRORE!!posizione occupata!!\n");
    return NULL;
    }
    pt = (nodo*)malloc(sizeof(nodo));
    pt->x=x;
    pt->y=y;
    pt->n=n++;
    pt->c=c;
    pt->next=NULL;
    return (pt);
    }




    grafo* g_insert(grafo* G,int x,int y,char c)
    {
    G=graf;
    nodo *pt;
    if (G==NULL)
    return crea(1);
    pt = realloc(creanodo(x,y,c), (G->num+1) *sizeof(nodo*));
    G->s[G->num]=pt;
    if (G->s !=NULL)
    {
    pt=G->s[G->num];
    G->num = G->num+1;
    }
    return(G);
    }


    nodo *inserisciInTesta(nodo *inizio,int x,int y)
    {
    nodo *temp=(nodo*)malloc(sizeof(nodo));
    temp->x=x;
    temp->y=y;
    temp->next=inizio;
    list=temp;
    list->next=temp->next;
    return temp;
    }

    void inserimento(int x,int y,char c)
    {
    nodo* tmp=list;
    if ( tmp == NULL )
    {
    list=creanodo(x,y,c);
    list->next=tmp;
    }
    else {
    while((tmp->next != NULL))
    {
    tmp=tmp->next;
    }

    if((tmp->next == NULL))
    {
    tmp->next=creanodo(x,y,c);
    }
    }

    }


    int TestElementoInLista(nodo* lista,int x,int y)
    {
    if (lista == NULL)
    return 0;
    else
    if (lista->x==x && lista->y==y)
    return 1;
    else
    return (TestElementoInLista(lista->next, x,y));

    }



    nodo* EliminaDaLista(nodo* lista,int x,int y)
    {
    nodo* pt=trovaNodo(x,y);
    if(pt!=NULL )
    {
    lista=pt->next;
    free(pt);
    printf("Nodo eliminato!!\n");
    }
    }





    /*DEFINIZIONE FUNZIONE PER LA STAMPA A VIDEO*/

    void stampaGrafo(grafo* G)
    {
    int i,ns=0;
    nodo* pt=list;

    if(G==NULL)
    {
    printf("\nNessun nodo presente!!\n\n");
    }
    else
    {
    printf("\nNum vertici %d -> ", G->num);
    for(i=0;i<G->num;i++)
    {
    printf("\nNodi adiacenti al nodo %d -> ",i);
    pt=G->s[i];
    while(pt != NULL)
    {
    printf("Nodo:\t(%d,%d,%c)\n\n",pt->x,pt->y,pt->c);

    ns=ns+1;
    pt=pt->next;
    }
    printf("/n");
    }
    printf("\nNum archi %d -> ", ns);
    }
    }




    int main(int argc,char *argv[])
    {
    FILE* fp;
    char c;
    char* file;
    int x,y,x1,y1;

    printf("sono nel MAIN\n");

    // printf("Che file vuoi leggere? \n");
    // scanf("%s",file);
    file = "p.txt";
    fp=fopen(file,"r");

    if (fp == NULL)
    printf("Il file non esiste\n");
    else
    {
    printf("il file e' stato aperto %s\n", file);
    }

    while( !feof(fp) ){
    fscanf(fp,"%c",&c);
    switch(c){
    case 'r':
    printf("sono nel case r\n");
    fscanf(fp,"%d",&x);
    printf("x=%d\n", x);
    fscanf(fp,"%d",&y);
    printf("y=%d\n", y);
    g_insert(graf,x,y,c);
    break;
    case 'v':
    printf("sono nel case v\n");
    fscanf(fp,"%d",&x);
    printf("x=%d\n", x);
    fscanf(fp,"%d",&y);
    printf("y=%d\n", y);
    g_insert(graf,x,y,c);
    break;
    case 'a':
    /* printf("sono nel case a\n");
    fscanf(fp,"%d",&x);
    printf("x1=%d\n", x);
    fscanf(fp,"%d",&y);
    printf("y1=%d\n", y);
    fscanf(fp,"%d",&x1);
    printf("x2=%d\n", x1);
    fscanf(fp,"%d",&y1);
    printf("y2=%d\n", y1);
    inserisci_arco(x,y,x1,y1,graf);
    break;
    case 's':
    printf("sono nel case n\n");
    stampaGrafo(graf);
    break;
    /* case 'm':
    printf("sono nel case m\n");
    stampaDis();
    break;
    case 'd':
    printf("sono nel case d\n");
    stampaRif();
    break; */
    }



    }
    fclose(fp);

    system("PAUSE");
    return 0;
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.