Skip to content
Snippets Groups Projects
Commit 1e7dd217 authored by TheVroum's avatar TheVroum
Browse files

first commit

parents
No related branches found
No related tags found
No related merge requests found
2.py 0 → 100644
import heapq
from collections import defaultdict
from functools import cache
from typing import Callable
from a import E, V
type Sommet = str
type Arc = tuple[Sommet, Sommet]
type Réel = float
type GraphType = tuple[set[Sommet], set[Arc]]
type FonctionDeLongueur = Callable[[Arc], Réel]
type Tas = list[tuple[Réel, Arc]]
@cache
def arcs_sortants_map(g: GraphType) -> dict[Sommet, set[Arc]]:
retour: defaultdict[Sommet, set[Arc]] = defaultdict(set)
for arc in g[1]:
retour[arc[0]].add(arc)
return retour
def arcs_sortants(g: GraphType, u: Sommet) -> set[Arc]:
return arcs_sortants_map(tuple(frozenset(g_component) for g_component in g))[u]
def plus_courts_chemins(
g: GraphType,
longueur: FonctionDeLongueur,
s: Sommet,
) -> tuple[
dict[Sommet, Arc | None],
dict[Sommet, Réel],
]:
prédécesseurs: dict[Sommet, Arc | None] = {}; distance: dict[Sommet, Réel] = {}
parcouru: set[Sommet] = {s}
frontière: Tas = []
def explore(u: Sommet) -> None:
for e in arcs_sortants(g, u):
heapq.heappush(frontière, (distance[u] + longueur(e), e))
prédécesseurs[s] = None
distance[s] = 0
explore(s)
while frontière:
e: Arc = heapq.heappop(frontière)[1]; v: Sommet = e[1]
if v not in parcouru:
parcouru.add(v); prédécesseurs[v] = e
distance[v] = longueur(e) + distance[e[0]]
explore(v)
return prédécesseurs, distance
print(plus_courts_chemins((V, E), lambda x: 1.0, "A"))
File added
a.py 0 → 100644
E: set[tuple[str, str]] = {
("A", "A2"),
("A2", "C"),
("A2", "A"),
("C", "A2"),
("C", "C1"),
("C1", "C"),
("C", "C2"),
("C2", "C"),
("C1", "C2"),
("C2", "C1"),
("C1", "B1"),
("C2", "D2"),
("B2", "F"),
("B1", "C1"),
("B1", "B2"),
("B2", "D1"),
("B2", "B1"),
("D1", "F"),
("D1", "B2"),
("D1", "D2"),
("D2", "C2"),
("D2", "D1"),
("F", "F1"),
("F", "B2"),
("F", "D1"),
("F1", "F"),
("F1", "H"),
("H", "F1"),
}
V: set[str] = {
v for a in E for v in a
}
_ = (
{
"A": None,
"A2": ("A", "A2"),
"C": ("A2", "C"),
"C1": ("C", "C1"),
"C2": ("C", "C2"),
"B1": ("C1", "B1"),
"D2": ("C2", "D2"),
"B2": ("B1", "B2"),
"D1": ("D2", "D1"),
"F": ("B2", "F"),
"F1": ("F", "F1"),
"H": ("F1", "H"),
},
{
"A": 0,
"A2": 1.0,
"C": 2.0,
"C1": 3.0,
"C2": 3.0,
"B1": 4.0,
"D2": 4.0,
"B2": 5.0,
"D1": 5.0,
"F": 6.0,
"F1": 7.0,
"H": 8.0,
},
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment