|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
lista di archi collegati tra di loro in C
Come posso fare lista di archi collegati tra di loro in C per rappresentare un grafo?? avete qualche esempio??
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Penso che più che creare una lista di archi, tu devi rappresentare un grafo nel suo complesso... potresti usare una matrice di adiacenza per esempio. In questo caso rappresenti gli archi in una matrice quadra di dimensione uguale al numero di nodi.
__________________
CPU Ryzen 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
lista di archi collegati tra di loro in C
Va bene secondo voi cosi?? sembra che non parte
Il grafo G è rappresentato utilizzando la struttura dati delle liste di adiacenza, la sequenza S è rappresentata mediante una lista. #include <stdlib.h> #include <stdio.h> #define MAX 50 struct nodo { int info; struct nodo *next; }; struct nodo *leggi_lista(void) { struct nodo *p, *primo, *ultimo; int a, i, n; primo = NULL; ultimo = NULL; printf("Numero di elementi: "); scanf("%d", &n); for (i=0; i<n; i++) { scanf("%d", &a); p = malloc(sizeof(struct nodo)); p->info = a; p->next = NULL; if (!primo) primo = p; if (ultimo) ultimo->next = p; ultimo = p; } return(primo); } int leggi_grafo(struct nodo *l[]) { int i, n; printf("Numero di vertici del grafo: "); scanf("%d", &n); for (i=0; i<n; i++) { printf("Lista di adiacenza del vertice %d\n", i); l[i] = leggi_lista(); } return(n); } int adiacente(int u, int v, struct nodo *l[]) { struct nodo *p; p = l[u]; while (p!=NULL && p->info != v) p = p->next; if (p == NULL) return(0); else return(1); } int hamiltoniano(struct nodo *primo, struct nodo *l[], int n) { int visitato[MAX], i, flag; struct nodo *p; for (i=0; i<n; i++) visitato[i] = 0; p = primo; visitato[p->info] = 1; while (p->next != NULL && !visitato[p->next->info] && adiacente(p->info, p->next->info, l)) { visitato[p->next->info] = 1; p = p->next; } flag = 1; for (i=0; i<n && flag==1; i++) flag = visitato[i]; return(flag); } int main(void) { struct nodo *lista[MAX], *primo; int n; n = leggi_grafo(lista); primo = leggi_lista(); if (hamiltoniano(primo, lista, n)) printf("La sequenza di vertici e' un ciclo hamiltoniano in G.\n"); else printf("La sequenza di vertici non e' un ciclo hamiltoniano.\n"); return(1); } |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:01.




















