J'ai un graphique dirigé acyclique. Je voudrais assigner des niveaux à chaque sommet d'une manière qui garantit que si le bord (v1, v2) est dans le graphique, alors niveau (v1)> niveau (v2). Je voudrais aussi que si le niveau (v1) = niveau (v3) à chaque fois (v1, v2) et (v3, v2) sont dans le graphique. De plus, les niveaux possibles sont discrets (aussi bien les prendre pour des nombres naturels). Le cas idéal serait ce niveau (v1) = niveau (v2) + 1 quand (v1, v2) est dans le graphique et il n'y a pas d'autre chemin de v1 à v2, mais parfois cela n'est pas possible avec les autres contraintes - Par exemple, considérons un graphe sur cinq sommets avec les arêtes (a, b) (b, d) (d, e) (a, c) (c, e).
Est-ce que quelqu'un connaît un algorithme décent pour résoudre ce problème? Mes graphiques sont assez petits (| V | < = 25 ou plus), donc je n'ai pas besoin de quelque chose qui flambe rapidement - la simplicité est plus importante. Ma pensée jusqu'ici est de simplement trouver un élément au moins, assigner le niveau 0, trouver tous les parents, leur attribuer le niveau 1, et résoudre les contradictions en ajoutant +0.5 aux sommets appropriés, mais cela semble assez horrible.Comment affecter des "niveaux" aux sommets d'un graphe orienté acyclique?
Aussi, je reçois le sentiment qu'il pourrait être utile de supprimer tous les bords "implicites" (c.-à-remove (V1, V3) si le graphe contient à la fois (v1, v2) et (v2, v3).
Notez que ce schéma de nivellement ignore essentiellement les arêtes "implicites". – user382751