PDA

Visualizza versione completa : Liste di Adiacenza HELP!!!!!!!!!


mikeee
10-07-2003, 02.17.39
Salve a Tutti Domani ho l'esame di Strutture Dati, ho un problema da risolvere e nn riesco a capire dove sbaglio!!!
Aiutatemi Per Favore!!!!!!!!!!!!!
Questo č il Testo:

Dato un albero con radice T, chiamiamo altezza minima di un nodo v in T la minima distanza di v da una foglia.

a) Progettare una funzione (eventualmente ricorsiva) che, avendo in input un albero con radice T (rappresentato mediante liste di adiacenza), calcoli la somma delle altezze minime dei nodi di T.

Questo č il mio prog:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define Grado 2
#define MAX_VERTICI 15
#define TRUE 1
short int visitato[MAX_VERTICI];

typedef struct nod1 {
int vertice;
struct nod1 *link;
}nodo;
typedef nodo *coda_pointer;
coda_pointer albero[MAX_VERTICI];
coda_pointer list_c[MAX_VERTICI];
int cerca_alt_min(int, int);
void insert(void);
void visual_liste(coda_pointer);
int list_cont(int,int);
int n; int alt[MAX_VERTICI]; int dist[MAX_VERTICI]; int z=0; int foglie[MAX_VERTICI];
int ricerca_foglie(int);
int confronta(int);
void del_visit(void);
coda_pointer punt = NULL;
main()
{
int i;
int Alt=0;
insert();
clrscr();
for(i=0;i<n;i++)dist[i]=-1;
for (i=0;i<n;i++)
{
visual_liste(albero[i]);
}
ricerca_foglie(0);
del_visit();

for (i=0;i<n;i++)
{
if(dist[i]==-1)
{
cerca_alt_min(i,i);
del_visit();
}
}
for (i=0;i<n;i++)
{
printf("\n ALTEZZA MIN DI %d= %d",i,dist[i]);
}
//cerca_alt_min(0);
printf("\n");
/* for (i=0;i<1;i++)
{
visual_liste(list_c[i]);
} */
fflush(stdin);
getchar();
}

void insert(void)

{
coda_pointer temp, current;
int i, buf, we;

printf("\nDIGITA IL NUMERO DI NODI: ");
scanf("%d",&n);
for (i = 0; i < n; i++) {
albero[i] = (coda_pointer) malloc(sizeof(nodo));
albero[i]->vertice = i; albero[i]->link = NULL;
current = albero[i];
for (we=0;we<Grado;we++)
{
printf("\nNODI CONNESSI A %3d \n",i);
printf("(VALORI TRA 0 E%3d, ESCLUSO %3d; -1 TERMINA)", n-1,i);
scanf("%d",&buf);
if (buf == -1) break;
else if (buf <=-1 || buf > n-1 || buf==i) continue;
temp = (coda_pointer) malloc(sizeof(nodo));
temp->link = NULL; temp->vertice = buf;
current->link = temp; current = current->link;
}
}
}

void visual_liste(nodo *p)
{
if (p)
{
while (p)
{
printf("%d", p->vertice);
printf(" --> ");
p = p->link;
}
printf("NULL");
}
else printf("\n LISTA VUOTA");
printf("\n");
}

int ricerca_foglie(int v)
{
coda_pointer w;
int ke=0;
printf("%5d ",v);
visitato[v]=TRUE;
for(w = albero[v]; w; w = w->link)
{
ke++;
if(w->link==NULL&&ke==1)
{
printf("\n %d E' UNA FOGLIA",w->vertice);
dist[w->vertice]=0;
foglie[z++];
}
if(!visitato[w->vertice])
{
ricerca_foglie(w->vertice);
}
}
fflush(stdin);
}


int cerca_alt_min(int v,int p)
{
coda_pointer w;
int foglia;
int ke=0;
int k;
printf("%5d ",v);
visitato[v]=TRUE;
if(foglia!=NULL)
alt[k]++;
for(w = albero[v]; w; w = w->link)
{
ke++;
if((confronta(v))==1)
{
printf("\nFOGLIA TROVATA");
if(ke<dist[p]||dist[p]==-1)
dist[p]=ke;
}
if(!visitato[w->vertice])
{
cerca_alt_min(w->vertice,p);
}
}
fflush(stdin);
//getchar();
}

void del_visit()
{
int g;
for(g=0;g<MAX_VERTICI;g++)
visitato[g];
}

int confronta(int dato)
{
int i;
for(i=0;i<=z;i++)
{
if(foglie[i]==dato)
return 1;
}
return 0;
}

:S

P8257 WebMaster
10-07-2003, 13.53.20
Puoi ripostarlo col tago CODE? .. cosė mantiene le tabulazione ed č pių leggibile... grazie

Bye :cool:

mikeee
10-07-2003, 14.01.07
Scusate......
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define Grado 2
#define MAX_VERTICI 15
#define TRUE 1
short int visitato[MAX_VERTICI];

typedef struct nod1 {
int vertice;
struct nod1 *link;
}nodo;
typedef nodo *coda_pointer;
coda_pointer albero[MAX_VERTICI];
coda_pointer list_c[MAX_VERTICI];
int cerca_alt_min(int, int);
void insert(void);
void visual_liste(coda_pointer);
int list_cont(int,int);
int n; int alt[MAX_VERTICI]; int dist[MAX_VERTICI]; int z=0; int foglie[MAX_VERTICI]; int wow=0;
int ricerca_foglie(int);
int confronta(int);
void del_visit(void);
coda_pointer punt = NULL;
main()
{
int i;
int Alt=0;
insert();
clrscr();
for(i=0;i<n;i++)dist[i]=-1;foglie[i]=-1;
for (i=0;i<n;i++)
{
visual_liste(albero[i]);
}
ricerca_foglie(0);
del_visit();
for (i=0;i<z;i++) printf("\nFOGLIA: %d",foglie[i]);
for (i=0;i<n;i++)
{
if(dist[i]==-1)
{
cerca_alt_min(i,i);
wow=0;
del_visit();
}
}
for (i=0;i<n;i++)
{
printf("\n ALTEZZA MIN DI %d= %d",i,dist[i]);
}
//cerca_alt_min(0);
printf("\n");
/* for (i=0;i<1;i++)
{
visual_liste(list_c[i]);
} */
fflush(stdin);
getchar();
}

void insert(void)

{
coda_pointer temp, current;
int i, buf, we;

printf("\nDIGITA IL NUMERO DI NODI: ");
scanf("%d",&n);
for (i = 0; i < n; i++) {
albero[i] = (coda_pointer) malloc(sizeof(nodo));
albero[i]->vertice = i; albero[i]->link = NULL;
current = albero[i];
for (we=0;we<Grado;we++)
{
printf("\nNODI CONNESSI A %3d \n",i);
printf("(VALORI TRA 0 E%3d, ESCLUSO %3d; -1 TERMINA)", n-1,i);
scanf("%d",&buf);
if (buf == -1) break;
else if (buf <=-1 || buf > n-1 || buf==i) continue;
temp = (coda_pointer) malloc(sizeof(nodo));
temp->link = NULL; temp->vertice = buf;
current->link = temp; current = current->link;
}
}
}

void visual_liste(nodo *p)
{
if (p)
{
while (p)
{
printf("%d", p->vertice);
printf(" --> ");
p = p->link;
}
printf("NULL");
}
else printf("\n LISTA VUOTA");
printf("\n");
}

int ricerca_foglie(int v)
{
int ke=0;
coda_pointer w;
printf("%5d ",v);
visitato[v]=TRUE;
for(w = albero[v]; w; w = w->link)
{
ke++;
if(w->link==NULL&&ke==1)
{
printf("\n %d E' UNA FOGLIA",w->vertice);
foglie[z++]=w->vertice;
}
if(!visitato[w->vertice])
{
ricerca_foglie(w->vertice);
}
}
fflush(stdin);
}


int cerca_alt_min(int v,int p)
{
coda_pointer w;
int foglia;
int k;
printf("%5d ",v);
visitato[v]=TRUE;
if(foglia!=NULL)
alt[k]++;
for(w = albero[v]; w; w = w->link)
{
wow++;
if((confronta(v))==1)
{
printf("\nFOGLIA TROVATA");
if(wow<dist[p]||dist[p]==-1)
{
dist[p]=wow;
if(wow==1)return 1;
}
}
if(!visitato[w->vertice])
{
cerca_alt_min(w->vertice,p);
}
}
fflush(stdin);
//getchar();
}

void del_visit()
{
int g;
for(g=0;g<MAX_VERTICI;g++)
visitato[g];
}

int confronta(int dato)
{
int i;
for(i=0;i<z;i++)
{
printf("\n CONFRONTA FOGLIA %d CON %d",foglie[i],dato);
if(foglie[i]==dato)
return 1;
}
return 0;
}

LoryOne
10-07-2003, 14.04.43
Non ci saimo ancora.

1) Vai su mod/canc
2) Inserisci nome utente e password
3) Scrivi come prima riga "code" tra parentesi quadre
4) Vai in fondo al listato e scrivi come ultima riga "/code" tra parentesi quadre.

(Y)

mikeee
10-07-2003, 14.14.30
mi esce questo se provo a fare mod/canc

Non sei collegato al forum oppure non hai i permessi adatti per visualizzare questa pagina. Questo potrebbe essere dovuto a diversi motivi:
Non sei collegato al forum: inserisci nome utente e password nel box qui sotto e riprova.
Non hai le autorizzazioni adatte per accedere alla pagina che vuoi visitare. Stai cercando di modificare un msg scritto da altri utenti o di provare le opzioni di amministrazione? Verifica, nel regolamento del forum, di essere autorizzato a fare queste cose.
Se stai cercando di scrivere un msg e non vi riesci, sei stato probabilmente bannato dall'admin del forum.
Utenti collegati al forum: mikeee [disconnettiti]

mikeee
10-07-2003, 16.00.44
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define Grado 2
#define MAX_VERTICI 15
#define TRUE 1
short int visitato[MAX_VERTICI];

typedef struct nod1 {
int vertice;
struct nod1 *link;
}nodo;
typedef nodo *coda_pointer;
coda_pointer albero[MAX_VERTICI];
coda_pointer list_c[MAX_VERTICI];
int cerca_alt_min(int, int);
void insert(void);
void visual_liste(coda_pointer);
int list_cont(int,int);
int n; int alt[MAX_VERTICI]; int dist[MAX_VERTICI]; int z=0; int foglie[MAX_VERTICI]; int wow=0;
int ricerca_foglie(int);
int confronta(int);
void del_visit(void);
coda_pointer punt = NULL;
main()
{
int i;
int Alt=0;
insert();
clrscr();
for(i=0;i<n;i++)dist[i]=-1;foglie[i]=-1;
for (i=0;i<n;i++)
{
visual_liste(albero[i]);
}
ricerca_foglie(0);
del_visit();
for (i=0;i<z;i++) printf("\nFOGLIA: %d",foglie[i]);
for (i=0;i<n;i++)
{
if(dist[i]==-1)
{
cerca_alt_min(i,i);
wow=0;
del_visit();
}
}
for (i=0;i<n;i++)
{
printf("\n ALTEZZA MIN DI %d= %d",i,dist[i]);
}
//cerca_alt_min(0);
printf("\n");
/* for (i=0;i<1;i++)
{
visual_liste(list_c[i]);
} */
fflush(stdin);
getchar();
}

void insert(void)

{
coda_pointer temp, current;
int i, buf, we;

printf("\nDIGITA IL NUMERO DI NODI: ");
scanf("%d",&n);
for (i = 0; i < n; i++) {
albero[i] = (coda_pointer) malloc(sizeof(nodo));
albero[i]->vertice = i; albero[i]->link = NULL;
current = albero[i];
for (we=0;we<Grado;we++)
{
printf("\nNODI CONNESSI A %3d \n",i);
printf("(VALORI TRA 0 E%3d, ESCLUSO %3d; -1 TERMINA)", n-1,i);
scanf("%d",&buf);
if (buf == -1) break;
else if (buf <=-1 || buf > n-1 || buf==i) continue;
temp = (coda_pointer) malloc(sizeof(nodo));
temp->link = NULL; temp->vertice = buf;
current->link = temp; current = current->link;
}
}
}

void visual_liste(nodo *p)
{
if (p)
{
while (p)
{
printf("%d", p->vertice);
printf(" --> ");
p = p->link;
}
printf("NULL");
}
else printf("\n LISTA VUOTA");
printf("\n");
}

int ricerca_foglie(int v)
{
int ke=0;
coda_pointer w;
printf("%5d ",v);
visitato[v]=TRUE;
for(w = albero[v]; w; w = w->link)
{
ke++;
if(w->link==NULL&&ke==1)
{
printf("\n %d E' UNA FOGLIA",w->vertice);
foglie[z++]=w->vertice;
}
if(!visitato[w->vertice])
{
ricerca_foglie(w->vertice);
}
}
fflush(stdin);
}


int cerca_alt_min(int v,int p)
{
coda_pointer w;
int foglia;
int k;
printf("%5d ",v);
visitato[v]=TRUE;
if(foglia!=NULL)
alt[k]++;
for(w = albero[v]; w; w = w->link)
{
wow++;
if((confronta(v))==1)
{
printf("\nFOGLIA TROVATA");
if(wow<dist[p]||dist[p]==-1)
{
dist[p]=wow;
if(wow==1)return 1;
}
}
if(!visitato[w->vertice])
{
cerca_alt_min(w->vertice,p);
}
}
fflush(stdin);
//getchar();
}

void del_visit()
{
int g;
for(g=0;g<MAX_VERTICI;g++)
visitato[g];
}

int confronta(int dato)
{
int i;
for(i=0;i<z;i++)
{
printf("\n CONFRONTA FOGLIA %d CON %d",foglie[i],dato);
if(foglie[i]==dato)
return 1;
}
return 0;
}