|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2008
Città: italia
Messaggi: 80
|
Programma in C
a partire da questa documentazione(http://www.google.it/url?sa=t&rct=j&...1K9WLA&cad=rja) con pseudocodice dovrei implementare un algoritmo in C.qualcuno mi può Aiutare???
ho già un ipmlementazione ma nn corrisponde a qlla ke mi serve,qualcuno mi può aiutare a modificarla???? ** Leggere in input un grafo orientato G=(V,E) ed una sequenza ** S di vertici di G. Verificare se S e' un ciclo hamiltoniano, ** ossia un ciclo semplice in G che consente di raggiungere ** tutti i vertici di G. Il grafo G deve essere rappresentato ** utilizzando la struttura dati delle liste di adiacenza, la ** sequenza S deve essere 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:17.