distances_bretagne = {
    "Brest": {
        "Brest": 0,
        "Quimper": 70,
        "Lorient": 115,
        "Vannes": 170,
        "Saint-Brieuc": 145,
        "Rennes": 240,
        "Saint-Malo": 230,
        "Lannion": 95,
        "Fougères": 290,
        "Vitré": 280,
        "Morlaix": 60,
        "Concarneau": 95,
        "Dinan": 200,
        "Pontivy": 145,
        "Redon": 215,
        "Douarnenez": 70,
        "Lanester": 115,
        "Ploemeur": 120,
        "Hennebont": 120,
        "Plérin": 145,
        "Guingamp": 115,
        "Plougastel": 10,
        "Guipavas": 10,
        "Landerneau": 20,
        "Dinard": 225,
        "Bruz": 245,
    },
    "Quimper": {
        "Brest": 70,
        "Quimper": 0,
        "Lorient": 70,
        "Vannes": 120,
        "Saint-Brieuc": 135,
        "Rennes": 215,
        "Saint-Malo": 220,
        "Lannion": 110,
        "Fougères": 265,
        "Vitré": 255,
        "Morlaix": 80,
        "Concarneau": 25,
        "Dinan": 195,
        "Pontivy": 95,
        "Redon": 165,
        "Douarnenez": 25,
        "Lanester": 65,
        "Ploemeur": 75,
        "Hennebont": 70,
        "Plérin": 135,
        "Guingamp": 110,
        "Plougastel": 60,
        "Guipavas": 70,
        "Landerneau": 70,
        "Dinard": 215,
        "Bruz": 215,
    },
    "Lorient": {
        "Brest": 115,
        "Quimper": 70,
        "Lorient": 0,
        "Vannes": 60,
        "Saint-Brieuc": 125,
        "Rennes": 150,
        "Saint-Malo": 185,
        "Lannion": 145,
        "Fougères": 205,
        "Vitré": 190,
        "Morlaix": 110,
        "Concarneau": 45,
        "Dinan": 155,
        "Pontivy": 55,
        "Redon": 95,
        "Douarnenez": 90,
        "Lanester": 5,
        "Ploemeur": 5,
        "Hennebont": 10,
        "Plérin": 125,
        "Guingamp": 110,
        "Plougastel": 110,
        "Guipavas": 115,
        "Landerneau": 115,
        "Dinard": 185,
        "Bruz": 145,
    },
    "Vannes": {
        "Brest": 170,
        "Quimper": 120,
        "Lorient": 60,
        "Vannes": 0,
        "Saint-Brieuc": 115,
        "Rennes": 115,
        "Saint-Malo": 150,
        "Lannion": 165,
        "Fougères": 165,
        "Vitré": 155,
        "Morlaix": 155,
        "Concarneau": 95,
        "Dinan": 125,
        "Pontivy": 55,
        "Redon": 50,
        "Douarnenez": 140,
        "Lanester": 55,
        "Ploemeur": 65,
        "Hennebont": 50,
        "Plérin": 115,
        "Guingamp": 115,
        "Plougastel": 160,
        "Guipavas": 170,
        "Landerneau": 165,
        "Dinard": 145,
        "Bruz": 105,
    },
    "Saint-Brieuc": {
        "Brest": 145,
        "Quimper": 135,
        "Lorient": 125,
        "Vannes": 115,
        "Saint-Brieuc": 0,
        "Rennes": 100,
        "Saint-Malo": 85,
        "Lannion": 65,
        "Fougères": 150,
        "Vitré": 140,
        "Morlaix": 85,
        "Concarneau": 135,
        "Dinan": 60,
        "Pontivy": 65,
        "Redon": 125,
        "Douarnenez": 155,
        "Lanester": 120,
        "Ploemeur": 130,
        "Hennebont": 120,
        "Plérin": 5,
        "Guingamp": 30,
        "Plougastel": 135,
        "Guipavas": 140,
        "Landerneau": 130,
        "Dinard": 80,
        "Bruz": 105,
    },
    "Rennes": {
        "Brest": 240,
        "Quimper": 215,
        "Lorient": 150,
        "Vannes": 115,
        "Saint-Brieuc": 100,
        "Rennes": 0,
        "Saint-Malo": 70,
        "Lannion": 165,
        "Fougères": 50,
        "Vitré": 40,
        "Morlaix": 180,
        "Concarneau": 195,
        "Dinan": 55,
        "Pontivy": 110,
        "Redon": 65,
        "Douarnenez": 240,
        "Lanester": 150,
        "Ploemeur": 155,
        "Hennebont": 145,
        "Plérin": 100,
        "Guingamp": 130,
        "Plougastel": 235,
        "Guipavas": 240,
        "Landerneau": 225,
        "Dinard": 70,
        "Bruz": 15,
    },
    "Saint-Malo": {
        "Brest": 230,
        "Quimper": 220,
        "Lorient": 185,
        "Vannes": 150,
        "Saint-Brieuc": 85,
        "Rennes": 70,
        "Saint-Malo": 0,
        "Lannion": 145,
        "Fougères": 80,
        "Vitré": 100,
        "Morlaix": 170,
        "Concarneau": 205,
        "Dinan": 30,
        "Pontivy": 135,
        "Redon": 120,
        "Douarnenez": 245,
        "Lanester": 180,
        "Ploemeur": 190,
        "Hennebont": 175,
        "Plérin": 85,
        "Guingamp": 115,
        "Plougastel": 220,
        "Guipavas": 230,
        "Landerneau": 215,
        "Dinard": 10,
        "Bruz": 80,
    },
    "Lannion": {
        "Brest": 95,
        "Quimper": 110,
        "Lorient": 145,
        "Vannes": 165,
        "Saint-Brieuc": 65,
        "Rennes": 165,
        "Saint-Malo": 145,
        "Lannion": 0,
        "Fougères": 215,
        "Vitré": 205,
        "Morlaix": 40,
        "Concarneau": 125,
        "Dinan": 120,
        "Pontivy": 105,
        "Redon": 185,
        "Douarnenez": 135,
        "Lanester": 140,
        "Ploemeur": 150,
        "Hennebont": 135,
        "Plérin": 65,
        "Guingamp": 35,
        "Plougastel": 90,
        "Guipavas": 95,
        "Landerneau": 85,
        "Dinard": 140,
        "Bruz": 170,
    },
    "Fougères": {
        "Brest": 290,
        "Quimper": 265,
        "Lorient": 205,
        "Vannes": 165,
        "Saint-Brieuc": 150,
        "Rennes": 50,
        "Saint-Malo": 80,
        "Lannion": 215,
        "Fougères": 0,
        "Vitré": 30,
        "Morlaix": 230,
        "Concarneau": 245,
        "Dinan": 85,
        "Pontivy": 160,
        "Redon": 115,
        "Douarnenez": 290,
        "Lanester": 200,
        "Ploemeur": 210,
        "Hennebont": 195,
        "Plérin": 150,
        "Guingamp": 180,
        "Plougastel": 285,
        "Guipavas": 290,
        "Landerneau": 275,
        "Dinard": 85,
        "Bruz": 65,
    },
    "Vitré": {
        "Brest": 280,
        "Quimper": 255,
        "Lorient": 190,
        "Vannes": 155,
        "Saint-Brieuc": 140,
        "Rennes": 40,
        "Saint-Malo": 100,
        "Lannion": 205,
        "Fougères": 30,
        "Vitré": 0,
        "Morlaix": 220,
        "Concarneau": 235,
        "Dinan": 95,
        "Pontivy": 150,
        "Redon": 105,
        "Douarnenez": 280,
        "Lanester": 185,
        "Ploemeur": 195,
        "Hennebont": 180,
        "Plérin": 140,
        "Guingamp": 170,
        "Plougastel": 270,
        "Guipavas": 280,
        "Landerneau": 265,
        "Dinard": 100,
        "Bruz": 55,
    },
    "Morlaix": {
        "Brest": 60,
        "Quimper": 80,
        "Lorient": 110,
        "Vannes": 155,
        "Saint-Brieuc": 85,
        "Rennes": 180,
        "Saint-Malo": 170,
        "Lannion": 40,
        "Fougères": 230,
        "Vitré": 220,
        "Morlaix": 0,
        "Concarneau": 95,
        "Dinan": 145,
        "Pontivy": 105,
        "Redon": 185,
        "Douarnenez": 105,
        "Lanester": 105,
        "Ploemeur": 115,
        "Hennebont": 100,
        "Plérin": 85,
        "Guingamp": 55,
        "Plougastel": 55,
        "Guipavas": 60,
        "Landerneau": 45,
        "Dinard": 165,
        "Bruz": 190,
    },
    "Concarneau": {
        "Brest": 95,
        "Quimper": 25,
        "Lorient": 45,
        "Vannes": 95,
        "Saint-Brieuc": 135,
        "Rennes": 195,
        "Saint-Malo": 205,
        "Lannion": 125,
        "Fougères": 245,
        "Vitré": 235,
        "Morlaix": 95,
        "Concarneau": 0,
        "Dinan": 185,
        "Pontivy": 85,
        "Redon": 145,
        "Douarnenez": 50,
        "Lanester": 40,
        "Ploemeur": 50,
        "Hennebont": 45,
        "Plérin": 135,
        "Guingamp": 115,
        "Plougastel": 85,
        "Guipavas": 95,
        "Landerneau": 85,
        "Dinard": 200,
        "Bruz": 190,
    },
    "Dinan": {
        "Brest": 200,
        "Quimper": 195,
        "Lorient": 155,
        "Vannes": 125,
        "Saint-Brieuc": 60,
        "Rennes": 55,
        "Saint-Malo": 30,
        "Lannion": 120,
        "Fougères": 85,
        "Vitré": 95,
        "Morlaix": 145,
        "Concarneau": 185,
        "Dinan": 0,
        "Pontivy": 105,
        "Redon": 100,
        "Douarnenez": 220,
        "Lanester": 150,
        "Ploemeur": 160,
        "Hennebont": 145,
        "Plérin": 60,
        "Guingamp": 90,
        "Plougastel": 195,
        "Guipavas": 200,
        "Landerneau": 190,
        "Dinard": 25,
        "Bruz": 65,
    },
    "Pontivy": {
        "Brest": 145,
        "Quimper": 95,
        "Lorient": 55,
        "Vannes": 55,
        "Saint-Brieuc": 65,
        "Rennes": 110,
        "Saint-Malo": 135,
        "Lannion": 105,
        "Fougères": 160,
        "Vitré": 150,
        "Morlaix": 105,
        "Concarneau": 85,
        "Dinan": 105,
        "Pontivy": 0,
        "Redon": 80,
        "Douarnenez": 115,
        "Lanester": 55,
        "Ploemeur": 60,
        "Hennebont": 50,
        "Plérin": 65,
        "Guingamp": 75,
        "Plougastel": 135,
        "Guipavas": 145,
        "Landerneau": 130,
        "Dinard": 130,
        "Bruz": 115,
    },
    "Redon": {
        "Brest": 215,
        "Quimper": 165,
        "Lorient": 95,
        "Vannes": 50,
        "Saint-Brieuc": 125,
        "Rennes": 65,
        "Saint-Malo": 120,
        "Lannion": 185,
        "Fougères": 115,
        "Vitré": 105,
        "Morlaix": 185,
        "Concarneau": 145,
        "Dinan": 100,
        "Pontivy": 80,
        "Redon": 0,
        "Douarnenez": 190,
        "Lanester": 90,
        "Ploemeur": 100,
        "Hennebont": 85,
        "Plérin": 125,
        "Guingamp": 140,
        "Plougastel": 205,
        "Guipavas": 215,
        "Landerneau": 200,
        "Dinard": 115,
        "Bruz": 55,
    },
    "Douarnenez": {
        "Brest": 70,
        "Quimper": 25,
        "Lorient": 90,
        "Vannes": 140,
        "Saint-Brieuc": 155,
        "Rennes": 240,
        "Saint-Malo": 245,
        "Lannion": 135,
        "Fougères": 290,
        "Vitré": 280,
        "Morlaix": 105,
        "Concarneau": 50,
        "Dinan": 220,
        "Pontivy": 115,
        "Redon": 190,
        "Douarnenez": 0,
        "Lanester": 85,
        "Ploemeur": 95,
        "Hennebont": 90,
        "Plérin": 155,
        "Guingamp": 135,
        "Plougastel": 60,
        "Guipavas": 70,
        "Landerneau": 70,
        "Dinard": 240,
        "Bruz": 235,
    },
    "Lanester": {
        "Brest": 115,
        "Quimper": 65,
        "Lorient": 5,
        "Vannes": 55,
        "Saint-Brieuc": 120,
        "Rennes": 150,
        "Saint-Malo": 180,
        "Lannion": 140,
        "Fougères": 200,
        "Vitré": 185,
        "Morlaix": 105,
        "Concarneau": 40,
        "Dinan": 150,
        "Pontivy": 55,
        "Redon": 90,
        "Douarnenez": 85,
        "Lanester": 0,
        "Ploemeur": 10,
        "Hennebont": 5,
        "Plérin": 120,
        "Guingamp": 105,
        "Plougastel": 105,
        "Guipavas": 115,
        "Landerneau": 110,
        "Dinard": 180,
        "Bruz": 140,
    },
    "Ploemeur": {
        "Brest": 120,
        "Quimper": 75,
        "Lorient": 5,
        "Vannes": 65,
        "Saint-Brieuc": 130,
        "Rennes": 155,
        "Saint-Malo": 190,
        "Lannion": 150,
        "Fougères": 210,
        "Vitré": 195,
        "Morlaix": 115,
        "Concarneau": 50,
        "Dinan": 160,
        "Pontivy": 60,
        "Redon": 100,
        "Douarnenez": 95,
        "Lanester": 10,
        "Ploemeur": 0,
        "Hennebont": 15,
        "Plérin": 130,
        "Guingamp": 115,
        "Plougastel": 115,
        "Guipavas": 120,
        "Landerneau": 120,
        "Dinard": 190,
        "Bruz": 150,
    },
    "Hennebont": {
        "Brest": 120,
        "Quimper": 70,
        "Lorient": 10,
        "Vannes": 50,
        "Saint-Brieuc": 120,
        "Rennes": 145,
        "Saint-Malo": 175,
        "Lannion": 135,
        "Fougères": 195,
        "Vitré": 180,
        "Morlaix": 100,
        "Concarneau": 45,
        "Dinan": 145,
        "Pontivy": 50,
        "Redon": 85,
        "Douarnenez": 90,
        "Lanester": 5,
        "Ploemeur": 15,
        "Hennebont": 0,
        "Plérin": 120,
        "Guingamp": 100,
        "Plougastel": 110,
        "Guipavas": 120,
        "Landerneau": 115,
        "Dinard": 175,
        "Bruz": 135,
    },
    "Plérin": {
        "Brest": 145,
        "Quimper": 135,
        "Lorient": 125,
        "Vannes": 115,
        "Saint-Brieuc": 5,
        "Rennes": 100,
        "Saint-Malo": 85,
        "Lannion": 65,
        "Fougères": 150,
        "Vitré": 140,
        "Morlaix": 85,
        "Concarneau": 135,
        "Dinan": 60,
        "Pontivy": 65,
        "Redon": 125,
        "Douarnenez": 155,
        "Lanester": 120,
        "Ploemeur": 130,
        "Hennebont": 120,
        "Plérin": 0,
        "Guingamp": 30,
        "Plougastel": 135,
        "Guipavas": 140,
        "Landerneau": 130,
        "Dinard": 80,
        "Bruz": 105,
    },
    "Guingamp": {
        "Brest": 115,
        "Quimper": 110,
        "Lorient": 110,
        "Vannes": 115,
        "Saint-Brieuc": 30,
        "Rennes": 130,
        "Saint-Malo": 115,
        "Lannion": 35,
        "Fougères": 180,
        "Vitré": 170,
        "Morlaix": 55,
        "Concarneau": 115,
        "Dinan": 90,
        "Pontivy": 75,
        "Redon": 140,
        "Douarnenez": 135,
        "Lanester": 105,
        "Ploemeur": 115,
        "Hennebont": 100,
        "Plérin": 30,
        "Guingamp": 0,
        "Plougastel": 110,
        "Guipavas": 115,
        "Landerneau": 105,
        "Dinard": 110,
        "Bruz": 135,
    },
    "Plougastel": {
        "Brest": 10,
        "Quimper": 60,
        "Lorient": 110,
        "Vannes": 160,
        "Saint-Brieuc": 135,
        "Rennes": 235,
        "Saint-Malo": 220,
        "Lannion": 90,
        "Fougères": 285,
        "Vitré": 270,
        "Morlaix": 55,
        "Concarneau": 85,
        "Dinan": 195,
        "Pontivy": 135,
        "Redon": 205,
        "Douarnenez": 60,
        "Lanester": 105,
        "Ploemeur": 115,
        "Hennebont": 110,
        "Plérin": 135,
        "Guingamp": 110,
        "Plougastel": 0,
        "Guipavas": 10,
        "Landerneau": 15,
        "Dinard": 220,
        "Bruz": 240,
    },
    "Guipavas": {
        "Brest": 10,
        "Quimper": 70,
        "Lorient": 115,
        "Vannes": 170,
        "Saint-Brieuc": 140,
        "Rennes": 240,
        "Saint-Malo": 230,
        "Lannion": 95,
        "Fougères": 290,
        "Vitré": 280,
        "Morlaix": 60,
        "Concarneau": 95,
        "Dinan": 200,
        "Pontivy": 145,
        "Redon": 215,
        "Douarnenez": 70,
        "Lanester": 115,
        "Ploemeur": 120,
        "Hennebont": 120,
        "Plérin": 140,
        "Guingamp": 115,
        "Plougastel": 10,
        "Guipavas": 0,
        "Landerneau": 10,
        "Dinard": 225,
        "Bruz": 245,
    },
    "Landerneau": {
        "Brest": 20,
        "Quimper": 70,
        "Lorient": 115,
        "Vannes": 165,
        "Saint-Brieuc": 130,
        "Rennes": 225,
        "Saint-Malo": 215,
        "Lannion": 85,
        "Fougères": 275,
        "Vitré": 265,
        "Morlaix": 45,
        "Concarneau": 85,
        "Dinan": 190,
        "Pontivy": 130,
        "Redon": 200,
        "Douarnenez": 70,
        "Lanester": 110,
        "Ploemeur": 120,
        "Hennebont": 115,
        "Plérin": 130,
        "Guingamp": 105,
        "Plougastel": 15,
        "Guipavas": 10,
        "Landerneau": 0,
        "Dinard": 210,
        "Bruz": 230,
    },
    "Dinard": {
        "Brest": 225,
        "Quimper": 215,
        "Lorient": 185,
        "Vannes": 145,
        "Saint-Brieuc": 80,
        "Rennes": 70,
        "Saint-Malo": 10,
        "Lannion": 140,
        "Fougères": 85,
        "Vitré": 100,
        "Morlaix": 165,
        "Concarneau": 200,
        "Dinan": 25,
        "Pontivy": 130,
        "Redon": 115,
        "Douarnenez": 240,
        "Lanester": 180,
        "Ploemeur": 190,
        "Hennebont": 175,
        "Plérin": 80,
        "Guingamp": 110,
        "Plougastel": 220,
        "Guipavas": 225,
        "Landerneau": 210,
        "Dinard": 0,
        "Bruz": 80,
    },
    "Bruz": {
        "Brest": 245,
        "Quimper": 215,
        "Lorient": 145,
        "Vannes": 105,
        "Saint-Brieuc": 105,
        "Rennes": 15,
        "Saint-Malo": 80,
        "Lannion": 170,
        "Fougères": 65,
        "Vitré": 55,
        "Morlaix": 190,
        "Concarneau": 190,
        "Dinan": 65,
        "Pontivy": 115,
        "Redon": 55,
        "Douarnenez": 235,
        "Lanester": 140,
        "Ploemeur": 150,
        "Hennebont": 135,
        "Plérin": 105,
        "Guingamp": 135,
        "Plougastel": 240,
        "Guipavas": 245,
        "Landerneau": 230,
        "Dinard": 80,
        "Bruz": 0,
    },
}


def generer_csv_25_villes(nom_fichier, data):

    # 1. Création de l'entête
    entete = "Ville"
    for ville in data:
        entete += "," + ville
    entete += "\n"

    # 2. Construction des lignes de la matrice de distance
    lignes = []
    for ville in data:
        ligne = ville
        for autre_ville in data[ville]:
            if autre_ville != ville:
                ligne += "," + str(data[ville][autre_ville])
            else:
                ligne += "," + str(0)
        ligne += "\n"
        lignes.append(ligne)

    # 3. Écriture dans le fichier CSV
    f = open(nom_fichier, "w", encoding="utf-8")
    f.write(entete)
    for ligne in lignes:
        f.write(ligne)
    f.close()


# Test de la génération
if __name__ == "__main__":
    nom = "bretagne_25_villes.csv"
    generer_csv_25_villes(nom, distances_bretagne)
    print(f"Fichier '{nom}' généré avec succès !")
