PDA

View Full Version : [DELPHI] cerco aiuto urgentissimo please


palermitanodoc
23-07-2008, 10:36
Salve!intanto ringrazio chiunque stia leggendo il topic...e ringrazierò ancorà di più chiunque potrà pormi il suo aiuto:D Il problema è:
Scrivere una procedura che riceve in input un grafo orientato aciclico pesato e due vertici s,t, e restituisce il numero di cammini da s a t nel grafo G con peso maggiore di un intero k fissato.

La struttura se ho ben capito dovrebbe essere questa :

Type lista=^elemento;

elemento=record
inf:integer;
peso_Arco:integer;
next:lista;
end;

Tipografo=array[1..10] of lista;

oppure mi converrebbe usare una matrice di adiacenza? si accettano aiuti:)

Ziosilvio
23-07-2008, 12:07
Quando hai l'esame?

palermitanodoc
23-07-2008, 15:09
non si sa bene...dovrebbe essere o domani o lunedì,entro stasera lo saprò :cry: sapresti per caso darmi una mano?perchè bene o male all'orale vorrei sapere dire qualcosa su questo esercizio che non ho capito..thanks

Ziosilvio
23-07-2008, 16:11
Purtroppo non ricordo abbastanza Pascal per esserti utile :( ma un paio di cose le vorrei dire.

Per una matrice di adiacenza su n nodi ti ci vogliono n*n elementi.
Questi elementi di solito sono 0 o 1, ma potrebbero essere numeri.
Per esempio, se l'arco(i,j) ha peso k, potresti porre M[i,j]=k; se non esiste, poni M[i,j]=0. Questo nell'ipotesi che tutti i pesi siano positivi.

Se invece vuoi implementare una lista di adiacenza, allora, devi fare qualcosa di più elaborato dell'implementazione canonica, in cui gli elementi di questa lista sono nodi, e di conseguenza non hanno peso.
Dovresti quindi associare una lista di oggetti che hanno un campo di tipo nodo, e un campo di tipo peso.

palermitanodoc
23-07-2008, 17:33
e come pensi che posso fare a contare il numero di cammini da s a t con peso maggiore di un intero k ?
non tanto al livello di codice quanto di pseudocodice:) in ogni caso grazie dell'interessamento:)

Ziosilvio
23-07-2008, 18:04
e come pensi che posso fare a contare il numero di cammini da s a t con peso maggiore di un intero k ?
Ora come ora mi viene in mente solo: fai una visita in ampiezza a partire da s, associando ad ogni passo (che corrisponde a un cammino) il suo peso. Quando arrivi a t, se il peso è maggiore di k, incrementi un contatore.

palermitanodoc
26-07-2008, 21:10
ti ringrazio per l'aiuto...l'idea sembra buona:D thanks:)

palermitanodoc
27-07-2008, 18:12
ho visto che proprio in quel modo non mi riesce....e ho provato un'altro modo....non so se sia una boiata o meno
procedure calcolapeso(G:tipografo;cont,s,t:integer;var num_cammini:integer);
var i:integer;
begin
if s<>t then begin
for i:=1 to maxvertici do
if (G[s,i]<>0) then begin
cont:=cont+G[s,i];
calcolapeso(G,cont,i,t,num_cammini);
end;
end
else if cont>k then
num_cammini:=num_cammini+1;
end;

le variabili cont,cammini e k sono inizializzate nel main... secondo voi potrebbe funzionare?=/ la richiesta è urgente visto che sono passato allo scritto e se mi chiede questo esercizio sono nella pupù:cry: domani c'è l'orale...thanks!