graphe+liste d'adjacence+tri topologique [JAVA] - Java - Programmation
Marsh Posté le 04-05-2003 à 22:28:56
Gné ?  
  
Tu peux la refaire en français, steuplé ? Nan passke là j'ai rien compris du tout  
 
Marsh Posté le 04-05-2003 à 22:31:09
en c++ on peut faire des structures avec le pcart 
j'aimerais savoir comment on fait en java 
et puis j'ai un type sommet=ENTIER 
idem j'aimerais savoir coment traduire ca en java
Marsh Posté le 04-05-2003 à 22:36:51
Euh baaa... le pcart, je sais pas c'que c'est donc je peux pas répondre. 
Par contre pour les sommets, en C++, tu faisais int sommet; Bin en Java c'est pareil ![[:xp1700] [:xp1700]](https://forum-images.hardware.fr/images/perso/xp1700.gif) 
 
Marsh Posté le 04-05-2003 à 22:38:38
ca je sais c'est la le probleme 
c'es tu ntype sommet=ENTIER(algo) 
et non  comme tu le dis sommet :entier(algo) 
PS:pcart(produit cartésien=typedef en c++ 
  
 
Marsh Posté le 04-05-2003 à 22:43:01
typedef int Sommet ; // Les sommets sont repérés par leur numéro 
j'aimerais une  traduction javaiene 
  
 
Marsh Posté le 04-05-2003 à 22:45:02
Ah ba non, les typedef en Java ça existe pas ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif)
Marsh Posté le 04-05-2003 à 22:51:29
Ba on utilise des int ![[:spamafote] [:spamafote]](https://forum-images.hardware.fr/images/perso/spamafote.gif) 
 
Si vraiment t'as rien d'autre à faire, tu peux t'amuser à créer une classe qui s'utilise comme un entier, m'enfin y a pas tellement d'intérêt. 
Pourquoi t'as besoin de définir le type sommet comme un entier ? C'est juste pour la lisibilité du code ?
Marsh Posté le 04-05-2003 à 22:54:17
bah disons qu'apparemment faut faire comme ca pour un graphe ave c liste d'adjacence dans le but d'effectuer un tri topologique 
je vais reessayé 
je repasserai plus tard 
si desfois tu as deja fait ca en java fais moi signe(lol) 
@+
Marsh Posté le 05-05-2003 à 00:02:24
moi j'ai pas compris un traitre mot de Dorf  
 
 
sauf le C++, evidemment 
Marsh Posté le 05-05-2003 à 00:04:41
le plus simple serait peut etre que j'inscrive le code à l'ecran et voir ce qui cloche
Marsh Posté le 05-05-2003 à 00:07:44
[class graph] 
 
public class graph 
{ 
     
 noeud_tete []g; 
    int n; 
    int MAX_SOMMETS=15; 
    int N_sommets=0; 
  
  
 
 
 
  
 graph(int N_sommets) 
 {n=N_sommets; 
  g=new noeud_tete[n]; 
  for(int i=0; i<n;i++) 
  g[i]=null; 
   
 } 
  
 public void tritop(graph g,int n) 
 {Sommet i,j,k,top; 
   
   
  Ptr_noeud ptr; 
  top=-1; 
  for(i=1;i<n;i++) 
  {if(g[i].count==0) 
     {g[i].count=top; 
   top=1; 
     } 
  } 
  for(i=1;i<n;i++) 
  {if(top==-1) 
   {System.out.println("Pas de tri topologique: Présence de cycle(s) !" );} 
   else {j=top; 
   top=g[j].count; 
   System.out.println(j); 
   ptr=g[j].lien; 
   while(ptr!=null) 
   {k=ptr.vertex; 
    g[k].count=g[k].count-1; 
    if(g[k].count==0) 
    {g[k].count=top; 
     top=k; 
    } 
    ptr=ptr.lien; 
     
   } 
         } 
  } 
 } 
   
   
   
   
  
  
  
 public static void main (String[] args) 
 {int n; 
  graph g; 
  g=new graph(10); 
  //n=N_sommets; 
  g.tritop(g,10); 
   
   
 	} 
} 
 
[class Sommet] 
 
public class Sommet 
{int Sommet; 
  
 public Sommet() 
 {Sommet=0;} 
  
 public int acces_Sommet() 
 {return Sommet;} 
  
  
  
  
} 
 
[class noeud] 
 
public class noeud 
{Sommet vertex; 
 float duree; 
 Ptr_noeud lien; 
  
 public noeud() 
 { vertex=null; 
   duree=0; 
   lien=null;} 
 
 
public Sommet acces_vertex() 
{return vertex;} 
 
public float acces_duree() 
{return duree;} 
 
public Ptr_noeud acces_lien() 
{return lien;} 
 
} 
 
[class noeud_tete] 
 
public class noeud_tete 
{int count; 
 Ptr_noeud lien; 
  
 public noeud_tete() 
 {count=0; 
  lien=null; 
 } 
  
  
 public Ptr_noeud acces_lien() 
{return lien;} 
  
  
 public int acces_count() 
 {return count;} 
 
[class Ptr_noeud] 
 
public class Ptr_noeud 
{Sommet vertex; 
 Ptr_noeud lien; 
  
 public Ptr_noeud() 
 { vertex=null; 
   lien=null;} 
 
 
public Sommet acces_vertex() 
{return vertex;} 
 
 
public Ptr_noeud acces_lien() 
{return lien;} 
Marsh Posté le 05-05-2003 à 00:12:08
ca marche pas et je comprends pas 
enfin si tu connais un site qui a un prog en java sur le tri topologique  dans un graphe à liste d'adjacence je suis preneur 
  
 
Marsh Posté le 05-05-2003 à 00:13:10
ben tu prends googgle et tu fais une recherche d'algo
Marsh Posté le 05-05-2003 à 00:16:41
j'ai l'algo!!! 
tout le probleme est la 
d'ou mes questions de structure,pcart....
Marsh Posté le 05-05-2003 à 00:17:47
Le choix de représentation par les listes d'adjacence est imposé ici. 
CONSTANTE:    MAX_SOMMETS = 15 
DEFINITION DE TYPE:  Sommet = ENTIER 
VARIABLES (GLOBALES) 
 Ptr_noeud: REFERENCE/POINTEUR sur noeud 
 noeud: P_CART( vertex:	Sommet, 
   Durée: REEL, // optionnel si réseaux avec sommets 
      // à activités  
   lien:	Ptr_noeud) 
 noeud_tête: P_CART(  count: ENTIER,  
        // count = demi-degré intérieur du sommet courant 
   	lien: Ptr_noeud) 
 graph: TABLEAU[1 ... MAX_SOMMETS] de noeud_tête 
 N_sommets: ENTIER  
 	// Nombre de sommets effectifs pour un graphe G donné 
 	// N_sommets <= MAX_SOMMETS 
Algorithme: 
---------- 
PROCEDURE créer_graph639() 
DEBUT 
 /*  A COMPLETER  cf. Fig. 6.39 de Horowitz et al. comme exemple */ 
 N_sommets <-- 6 
FIN 
PROCEDURE tritop(DR G: TABLEAU[1...MAX_SOMMETS] de noeud_tête, D N: ENTIER) 
// on développe l'algorithme général du cours avec N = N_sommets à l'appel 
DEBUT 
 i, j, k, top:	Sommets 
 ptr:	Ptr_noeud 
 top <-- (-1)	//crée une pile de sommets sans prédécesseurs 
 POUR i DE 1 A N  FAIRE 
 	SI (G.count = 0)  ALORS 
   G[i].count <-- top 
   top <-- i;	FSI 
 FPOUR 
 POUR i DE 1 A N  FAIRE 
 	SI (top = -1)  ALORS 
   ECRIRE('Pas de tri topologique: Présence de cycle(s) !' 
 
 	SINON 
   j <-- top	// dépile un sommet 
   top <-- G[top].count 
   ECRIRE('S',j,';  ' 
 
   ptr <-- G[j].lien 
   TANT QUE (ptr <> NIL)	FAIRE 
   	// décrémente le nb. de sommets successeurs de Sj 
   	k <-- (ptr->vertex) 
   	G[k].count <-- G[k].count-1  
   	SI (G[k].count =  0)	ALORS 
     // ajoute Sk à la pile 
     G[k].count <-- top 
     top <-- k 
   	FSI 
   	ptr <-- (ptr -> lien) 
   FTQUE 
 	FSI 
 FPOUR 
FIN  // de la procédure 'tritop' 
 
// Un module appelant possible: 
DEBUT 
 n: ENTIER 
 G: graph 
 créer_graph639() 
 n <-- N_sommets 
 tritop(G, n) 
FIN 
 
Marsh Posté le 05-05-2003 à 00:19:44
tu te rends compete que et toncode et ton algo sont illisibles ? (tu pourrais déjà améliorer les choes en utilisant les balises code et fixed et en indentant) 
apres si tu dis pas ou se situe ton problème... ça compile? ça plante, ça quoi?
Marsh Posté le 05-05-2003 à 00:25:03
désolé c'est une version beta(lol) 
l'algo vient du prof 
ca compile pas 
cannot convert "int" to Sommet 
[]cannot be applied to a value of type'graph' 
Marsh Posté le 05-05-2003 à 00:27:46
| Dorf54 a écrit : désolé c'est une version beta(lol)  | 
en Java y a pas d'appel implicite d'un cosntructeur 
donc il faut faire de l'explciit 
 
truc=new Sommet(i) 
 
et ta fonction tritop, j'ay comprends rien, elle à l'air d'etre membre, mais elle a un graphe en paramètre qui porte le meme nom qu'un membre... ça me parait pas tres serieux*µ. tu ferais bien de réfléchir tranquillement à tout ça 
 
edit: bref va te coucher, on verra ça plus tard
Marsh Posté le 04-05-2003 à 22:27:03
en fait j'ai deja l'algo et je dois le traduire en java
probleme: -pcart en java??
-type sommet=entier et non sommet:entier
merci pour votre aide