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

first commit

parents
Branches
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