A voir également:
- Programmer kruskal en C
- Programmer sms - Guide
- Programmer mail gmail - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Programmer un mail outlook - Guide
- Mettre en veille un programme - Guide
2 réponses
Voici l'adresse d'un site sur kruskal
http://www.iro.umontreal.ca/~aqelmoha/kd.htm
et voici mon programme:
il est ecrit en liberty basic
http://lbasic.atomysk.com
et voici le resultat:
ça marche !!!!!
@++
http://www.iro.umontreal.ca/~aqelmoha/kd.htm
et voici mon programme:
'saisie des arbres input "combien y a t'il d' arbres ?";nbarbre dim arbre$(nbarbre,2) for i=1 to nbarbre print "entrez le nom de l' arbre N° ";i input nom$ arbre$(i,1)=nom$ next i 'saisie des arêtes input "combien y a t'il d'arêtes ?";nbarete dim segment$(nbarete,4) for i= 1 to nbarete print "segment N° ";i input "arbre de debut ";ad$ input "arbre de fin ";af$ input "poids ";poid$ print poid$=right$("0000000000"+trim$(poid$),10) segment$(i,1)=ad$ segment$(i,2)=af$ segment$(i,3)=poid$ next i 'tri des segments par ordre croissant de poid sort segment$(, 1, nbarete, 3 for u=1 to nbarete print segment$(u,1);"-";segment$(u,2);" ";segment$(u,3) next u segment$(1,4)="x" 'indique que le premier segment est retenu foret=2 nbgr=1 ad$=segment$(1,1) af$=segment$(1,2) poidS=val(segment$(1,3)) 'ajout des arbres du segment au groupe numero 1 s=0 for i=1 to nbarbre if ad$=arbre$(i,1) or af$=arbre$(i,1) then s=s+1:arbre$(i,2)="1" if s=2 then exit for next i 'analyse des segments for u=2 to nbarete ad$=segment$(u,1) af$=segment$(u,2) poid=val(segment$(u,3)) print "Je selectionne le segment ";ad$;"-";af$;" qui a un poid de ";poids s=0 'recherche des groupes de chaque arbre du segment for i=1 to nbarbre if ad$=arbre$(i,1) then s=s+1:grad=val(arbre$(i,2)) if af$=arbre$(i,1) then s=s+1:graf=val(arbre$(i,2)) if s=2 then exit for next i 'si les arbres ne sont dans aucun groupe on en cree un nouveau if grad+graf=0 then nbgr=nbgr+1 s=0 for i=1 to nbarbre if ad$=arbre$(i,1) or af$=arbre$(i,1) then s=s+1:arbre$(i,2))=str$(nbgr) if s=2 then exit for next i segment$(u,4)="x" print "creation du groupe d'arbre numero ";nbgr print "le segment est retenus." goto [suite] end if '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 if grad*graf=0 then if grad then bgr=grad print "L'arbre ";af$;" à été ajouté au groupe ";bgr else bgr=graf print "L'arbre ";ad$;" à été ajouté au groupe ";bgr end if s=0 for i=1 to nbarbre if ad$=arbre$(i,1) or af$=arbre$(i,1) then s=s+1:arbre$(i,2))=str$(bgr) if s=2 then exit for next i segment$(u,4)="x" print "le segment est retenus." goto [suite] end if 'si les arbres sont dans le même groupe on ne retient pas le segment if grad=graf then print "ces arbres sont dans le groupes numero ";grad print "le segment ne sera pas retenus." goto [suite] end if 'si les deux arbres appartiennent à des groupes differents on regroupe les arbres des deux groupes. grm=min(grad, graf) grx=grad+graf-grm for i=1 to nbarbre if ad$=arbre$(i,1) or af$=arbre$(i,1) then arbre$(i,2))=str$(grm) else grr=val(arbre$(i,2)) if grr=grx then arbre$(i,2))=str$(grm) end if next i segment$(u,4)="x" print "regroupement des arbres des groupes numero ";grm;" et "; grx print "le segment est retenus." [suite] next u print print "Liste des segments retenus:" for u=1 to nbarete if segment$(u,4)="x" then print segment$(u,1);"-";segment$(u,2);" ";segment$(u,3) next u input "appuyez sur une touche pour quitter";r$ end
il est ecrit en liberty basic
http://lbasic.atomysk.com
et voici le resultat:
combien y a t'il d' arbres ?9 entrez le nom de l' arbre N° 1 ?A entrez le nom de l' arbre N° 2 ?B entrez le nom de l' arbre N° 3 ?C entrez le nom de l' arbre N° 4 ?D entrez le nom de l' arbre N° 5 ?E entrez le nom de l' arbre N° 6 ?F entrez le nom de l' arbre N° 7 ?G entrez le nom de l' arbre N° 8 ?H entrez le nom de l' arbre N° 9 ?I combien y a t'il d'arêtes ?14 segment N° 1 arbre de debut A arbre de fin B poids 4 segment N° 2 arbre de debut A arbre de fin H poids 8 segment N° 3 arbre de debut B arbre de fin C poids 8 segment N° 4 arbre de debut B arbre de fin H poids 11 segment N° 5 arbre de debut C arbre de fin D poids 7 segment N° 6 arbre de debut C arbre de fin F poids 4 segment N° 7 arbre de debut C arbre de fin I poids 2 segment N° 8 arbre de debut D arbre de fin E poids 9 segment N° 9 arbre de debut D arbre de fin F poids 14 segment N° 10 arbre de debut E arbre de fin F poids 10 segment N° 11 arbre de debut F arbre de fin G poids 2 segment N° 12 arbre de debut G arbre de fin H poids 1 segment N° 13 arbre de debut G arbre de fin I poids 6 segment N° 14 arbre de debut H arbre de fin I poids 7 G-H 0000000001 C-I 0000000002 F-G 0000000002 A-B 0000000004 C-F 0000000004 G-I 0000000006 H-I 0000000007 C-D 0000000007 B-C 0000000008 A-H 0000000008 D-E 0000000009 E-F 0000000010 B-H 0000000011 D-F 0000000014 Je selectionne le segment C-I qui a un poid de 0 creation du groupe d'arbre numero 2 le segment est retenus. Je selectionne le segment F-G qui a un poid de 0 L'arbre F à été ajouté au groupe 1 le segment est retenus. Je selectionne le segment A-B qui a un poid de 0 creation du groupe d'arbre numero 3 le segment est retenus. Je selectionne le segment C-F qui a un poid de 0 regroupement des arbres des groupes numero 1 et 2 le segment est retenus. Je selectionne le segment G-I qui a un poid de 0 ces arbres sont dans le groupes numero 1 le segment ne sera pas retenus. Je selectionne le segment H-I qui a un poid de 0 ces arbres sont dans le groupes numero 1 le segment ne sera pas retenus. Je selectionne le segment C-D qui a un poid de 0 L'arbre D à été ajouté au groupe 1 le segment est retenus. Je selectionne le segment B-C qui a un poid de 0 regroupement des arbres des groupes numero 1 et 3 le segment est retenus. Je selectionne le segment A-H qui a un poid de 0 ces arbres sont dans le groupes numero 1 le segment ne sera pas retenus. Je selectionne le segment D-E qui a un poid de 0 L'arbre E à été ajouté au groupe 1 le segment est retenus. Je selectionne le segment E-F qui a un poid de 0 ces arbres sont dans le groupes numero 1 le segment ne sera pas retenus. Je selectionne le segment B-H qui a un poid de 0 ces arbres sont dans le groupes numero 1 le segment ne sera pas retenus. Je selectionne le segment D-F qui a un poid de 0 ces arbres sont dans le groupes numero 1 le segment ne sera pas retenus. Liste des segments retenus: G-H 0000000001 C-I 0000000002 F-G 0000000002 A-B 0000000004 C-F 0000000004 C-D 0000000007 B-C 0000000008 D-E 0000000009 appuyez sur une touche pour quitter
ça marche !!!!!
@++
Pour le fun, je me suis penché sur la question et j'ai trouvé une solution assez simple.
entre tes segments puis classe les par ordre de poids croissant.
va du premier au dernier segment.
attribue a chaque arbre un n° de groupe.
(les 2 premiers auront le 1)
a chaque fois que tu analyse un nouveau segment, si l'un des arbres est dans un groupe alors attribue ce N° de groupe aux deux arbres du segment.
si les deux arbres sont dans deux groupes distinct, alors regroupe les arbres des 2 groupes.
si les arbres sont dans aucun groupe alors cree un nouveau groupe.
dans les 3 cas ci-dessus retiens le segment autrement ignore le.
au final tu te retrouve avec un groupe contenant tous les arbres.
(la liste des segments retenus constitue l'algorythme de kruskal.
CQFD.
entre tes segments puis classe les par ordre de poids croissant.
va du premier au dernier segment.
attribue a chaque arbre un n° de groupe.
(les 2 premiers auront le 1)
a chaque fois que tu analyse un nouveau segment, si l'un des arbres est dans un groupe alors attribue ce N° de groupe aux deux arbres du segment.
si les deux arbres sont dans deux groupes distinct, alors regroupe les arbres des 2 groupes.
si les arbres sont dans aucun groupe alors cree un nouveau groupe.
dans les 3 cas ci-dessus retiens le segment autrement ignore le.
au final tu te retrouve avec un groupe contenant tous les arbres.
(la liste des segments retenus constitue l'algorythme de kruskal.
CQFD.