Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

1 utilisateur anonyme et 11 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Algo de Warshall-Floyd et Kruskal

 
n°15408
Profil sup​primé
Posté le 09-12-2005 à 17:04:41  answer
 

Bonjour,  
 
j'aurais besoin d'aide car je dois coder en C,ces 2 algorithmes(avec une matrice et avec une liste d'adjacence pour chacun des algos).  
 
 
Merci d'avance à ceux qui m'aideront


Message édité par Profil supprimé le 12-12-2005 à 12:30:22
n°15409
P-Y
Profil : Vieux de la vieille
Posté le 09-12-2005 à 17:22:58  profilanswer
 

tu as deja code quelquechose? les structures de donnees (matrice et liste) sont imposees ou c'est a vous de les coder?

n°15415
lbasic
Profil : Jeune recrue
Posté le 10-12-2005 à 01:53:48  profilanswer
 

j'ai ça dans le fond d'un tirroir.
c'est en Liberty BASIC. (donc facile à lire).
 

Code :
  1. 'saisie des arbres
  2. input "combien y a t'il d' arbres ?";nbarbre
  3. dim arbre$(nbarbre,2)
  4. for i=1 to nbarbre
  5.     print "entrez le nom de l' arbre N° ";i
  6.     input nom$
  7.     arbre$(i,1)=nom$
  8. next i
  9. 'saisie des arêtes
  10. input "combien y a t'il d'arêtes ?";nbarete
  11. dim segment$(nbarete,4)
  12. for i= 1 to nbarete
  13.     print "segment N° ";i
  14.     input "arbre de debut ";ad$
  15.     input "arbre de fin   ";af$
  16.     input "poids          ";poid$
  17.     print
  18.     poid$=right$("0000000000"+trim$(poid$),10)
  19.     segment$(i,1)=ad$
  20.     segment$(i,2)=af$
  21.     segment$(i,3)=poid$
  22. next i
  23. 'tri des segments par ordre croissant de poid
  24. sort segment$(, 1, nbarete, 3
  25. for u=1 to nbarete
  26.     print segment$(u,1);"-";segment$(u,2);"   ";segment$(u,3)
  27. next u
  28. segment$(1,4)="x" 'indique que le premier segment est retenu
  29. foret=2
  30. nbgr=1
  31. ad$=segment$(1,1)
  32. af$=segment$(1,2)
  33. poidS=val(segment$(1,3))
  34. 'ajout des arbres du segment au groupe numero 1
  35. s=0
  36. for i=1 to nbarbre
  37.     if ad$=arbre$(i,1) or af$=arbre$(i,1) then s=s+1:arbre$(i,2)="1"
  38.     if s=2 then exit for
  39. next i
  40. 'analyse des segments
  41. for u=2 to nbarete
  42.     ad$=segment$(u,1)
  43.     af$=segment$(u,2)
  44.     poids=val(segment$(u,3))
  45.     print "Je selectionne le segment ";ad$;"-";af$;" qui a un poid de ";poids
  46.     s=0
  47.     'recherche des groupes de chaque arbre du segment
  48.     for i=1 to nbarbre
  49.         if ad$=arbre$(i,1) then s=s+1:grad=val(arbre$(i,2))
  50.         if af$=arbre$(i,1) then s=s+1:graf=val(arbre$(i,2))
  51.         if s=2 then exit for
  52.     next i
  53.    
  54.     'si les arbres ne sont dans aucun groupe on en cree un nouveau
  55.     if grad+graf=0 then
  56.         nbgr=nbgr+1
  57.         s=0
  58.         for i=1 to nbarbre
  59.             if ad$=arbre$(i,1) or af$=arbre$(i,1) then s=s+1:arbre$(i,2))=str$(nbgr)
  60.             if s=2 then exit for
  61.         next i
  62.         segment$(u,4)="x"
  63.         print "creation du groupe d'arbre numero ";nbgr
  64.         print "le segment est retenus."
  65.         goto [suite]
  66.     end if
  67.    
  68.     'si un des deux arbres n'est pas dans un groupe on le met dans le même groupe que l'autre arbre du segment
  69.     if grad*graf=0 then
  70.         if grad then
  71.             bgr=grad
  72.             print "L'arbre ";af$;" à été ajouté au groupe ";bgr
  73.         else
  74.             bgr=graf
  75.             print "L'arbre ";ad$;" à été ajouté au groupe ";bgr
  76.         end if
  77.         s=0
  78.         for i=1 to nbarbre
  79.             if ad$=arbre$(i,1) or af$=arbre$(i,1) then s=s+1:arbre$(i,2))=str$(bgr)
  80.             if s=2 then exit for
  81.         next i
  82.         segment$(u,4)="x"
  83.         print "le segment est retenus."
  84.         goto [suite]
  85.     end if
  86.    
  87.     'si les arbres sont dans le même groupe on ne retient pas le segment
  88.     if grad=graf then
  89.         print "ces arbres sont dans le groupes numero ";grad
  90.         print "le segment ne sera pas retenus."
  91.         goto [suite]
  92.     end if
  93.    
  94.     'si les deux arbres appartiennent à des groupes differents on regroupe les arbres des deux groupes.
  95.     grm=min(grad, graf)
  96.     grx=grad+graf-grm
  97.     for i=1 to nbarbre
  98.         if ad$=arbre$(i,1) or af$=arbre$(i,1) then
  99.             arbre$(i,2))=str$(grm)
  100.         else
  101.             grr=val(arbre$(i,2))
  102.             if grr=grx then arbre$(i,2))=str$(grm)
  103.         end if
  104.     next i
  105.     segment$(u,4)="x"
  106.     print "regroupement des arbres des groupes numero ";grm;" et "; grx
  107.     print "le segment est retenus."
  108. [suite]
  109. next u
  110. print
  111. print "Liste des segments retenus:"
  112. for u=1 to nbarete
  113.     if segment$(u,4)="x" then print segment$(u,1);"-";segment$(u,2);"   ";segment$(u,3)
  114. next u
  115. input "appuyez sur une touche pour quitter";r$
  116. end


 
j'espere avoir pu t'aider.
 
source du message : ( http://lbasic.atomysk.com/forum/vi [...] =6329#6329 )
 
@++


Message édité par lbasic le 10-12-2005 à 01:58:00
n°15416
Profil sup​primé
Posté le 10-12-2005 à 11:10:58  answer
 

P-Y a écrit :

tu as deja code quelquechose? les structures de donnees (matrice et liste) sont imposees ou c'est a vous de les coder?


Les structures de données c'est à nous de les coder.
Sinon,j'ai codé les structures matrice et liste de cette manière:

Code :
  1. typedef struct
  2. {
  3.   int nb_sommets;/* valeur indiquant le nb de sommets de la matrice */
  4.   int **matrice;/* matrice */
  5. }Graphe_Matrice;
  6. typedef struct cellule
  7. {
  8.   int valeur;
  9.   struct cellule *suivant;
  10. }Cellule;
  11. typedef Cellule *Liste;
  12. typedef struct
  13. {
  14.   int nb_sommets;
  15.   Liste*adjacence;
  16. }Graphe_Liste;


 
Si tu peux m'aider ce serait sympa.


Aller à :
Ajouter une réponse