Maison développement back-end Tutoriel C#.Net Comment implémenter l'algorithme du chemin le plus court en C#

Comment implémenter l'algorithme du chemin le plus court en C#

Sep 19, 2023 am 11:34 AM
实现方法 最短路径算法 c#programmation

Comment implémenter lalgorithme du chemin le plus court en C#

Comment implémenter l'algorithme du chemin le plus court en C#, des exemples de code spécifiques sont nécessaires

L'algorithme du chemin le plus court est un algorithme important en théorie des graphes, utilisé pour trouver le chemin le plus court entre deux sommets dans un graphe. Dans cet article, nous présenterons comment utiliser le langage C# pour implémenter deux algorithmes classiques du chemin le plus court : l'algorithme de Dijkstra et l'algorithme de Bellman-Ford.

L'algorithme de Dijkstra est un algorithme de chemin le plus court à source unique largement utilisé. Son idée de base est de partir du sommet de départ, de s'étendre progressivement à d'autres nœuds et de mettre à jour le chemin le plus court des nœuds découverts. Vous trouverez ci-dessous un exemple de code qui utilise l'algorithme de Dijkstra pour résoudre le chemin le plus court :

using System;
using System.Collections.Generic;

public class DijkstraAlgorithm
{
    private int vertexCount;
    private int[] distance;
    private bool[] visited;
    private List<List<int>> adjacencyMatrix;

    public DijkstraAlgorithm(List<List<int>> graph)
    {
        vertexCount = graph.Count;
        distance = new int[vertexCount];
        visited = new bool[vertexCount];
        adjacencyMatrix = graph;
    }

    public void FindShortestPath(int startVertex)
    {
        // 初始化距离数组和访问数组
        for (int i = 0; i < vertexCount; i++)
        {
            distance[i] = int.MaxValue;
            visited[i] = false;
        }

        // 起始顶点到自身的距离为0
        distance[startVertex] = 0;

        for (int i = 0; i < vertexCount - 1; i++)
        {
            int u = FindMinDistance();

            // 标记u为已访问
            visited[u] = true;

            // 更新u的邻接顶点的距离
            for (int v = 0; v < vertexCount; v++)
            {
                if (!visited[v] && adjacencyMatrix[u][v] != 0 && distance[u] != int.MaxValue
                    && distance[u] + adjacencyMatrix[u][v] < distance[v])
                {
                    distance[v] = distance[u] + adjacencyMatrix[u][v];
                }
            }
        }

        // 输出最短路径
        Console.WriteLine("顶点    最短路径");
        for (int i = 0; i < vertexCount; i++)
        {
            Console.WriteLine(i + "    " + distance[i]);
        }
    }

    private int FindMinDistance()
    {
        int minDistance = int.MaxValue;
        int minDistanceIndex = -1;
        for (int i = 0; i < vertexCount; i++)
        {
            if (!visited[i] && distance[i] <= minDistance)
            {
                minDistance = distance[i];
                minDistanceIndex = i;
            }
        }
        return minDistanceIndex;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        // 构建示例图
        List<List<int>> graph = new List<List<int>>()
        {
            new List<int>() {0, 4, 0, 0, 0, 0, 0, 8, 0},
            new List<int>() {4, 0, 8, 0, 0, 0, 0, 11, 0},
            new List<int>() {0, 8, 0, 7, 0, 4, 0, 0, 2},
            new List<int>() {0, 0, 7, 0, 9, 14, 0, 0, 0},
            new List<int>() {0, 0, 0, 9, 0, 10, 0, 0, 0},
            new List<int>() {0, 0, 4, 0, 10, 0, 2, 0, 0},
            new List<int>() {0, 0, 0, 14, 0, 2, 0, 1, 6},
            new List<int>() {8, 11, 0, 0, 0, 0, 1, 0, 7},
            new List<int>() {0, 0, 2, 0, 0, 0, 6, 7, 0}
        };

        // 使用Dijkstra算法求解最短路径
        DijkstraAlgorithm dijkstraAlgorithm = new DijkstraAlgorithm(graph);
        dijkstraAlgorithm.FindShortestPath(0);
    }
}
Copier après la connexion

L'algorithme Bellman-Ford est un algorithme permettant de résoudre le problème du chemin le plus court avec des graphiques de poids négatifs. Il utilise l'idée de programmation dynamique pour mettre à jour progressivement le chemin le plus court des sommets. Voici un exemple de code qui utilise l'algorithme de Bellman-Ford pour résoudre le chemin le plus court :

using System;
using System.Collections.Generic;

public class BellmanFordAlgorithm
{
    private int vertexCount;
    private int[] distance;
    private List<Edge> edges;

    private class Edge
    {
        public int source;
        public int destination;
        public int weight;

        public Edge(int source, int destination, int weight)
        {
            this.source = source;
            this.destination = destination;
            this.weight = weight;
        }
    }

    public BellmanFordAlgorithm(int vertexCount)
    {
        this.vertexCount = vertexCount;
        distance = new int[vertexCount];
        edges = new List<Edge>();
    }

    public void AddEdge(int source, int destination, int weight)
    {
        edges.Add(new Edge(source, destination, weight));
    }

    public void FindShortestPath(int startVertex)
    {
        // 初始化距离数组
        for (int i = 0; i < vertexCount; i++)
        {
            distance[i] = int.MaxValue;
        }

        // 起始顶点到自身的距离为0
        distance[startVertex] = 0;

        // 迭代vertexCount-1次,更新距离
        for (int i = 0; i < vertexCount - 1; i++)
        {
            foreach (Edge edge in edges)
            {
                if (distance[edge.source] != int.MaxValue && distance[edge.source] + edge.weight < distance[edge.destination])
                {
                    distance[edge.destination] = distance[edge.source] + edge.weight;
                }
            }
        }

        // 检查是否存在负权环路
        foreach (Edge edge in edges)
        {
            if (distance[edge.source] != int.MaxValue && distance[edge.source] + edge.weight < distance[edge.destination])
            {
                Console.WriteLine("图中存在负权环路");
                return;
            }
        }

        // 输出最短路径
        Console.WriteLine("顶点    最短路径");
        for (int i = 0; i < vertexCount; i++)
        {
            Console.WriteLine(i + "    " + distance[i]);
        }
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        // 构建示例图
        int vertexCount = 5;
        BellmanFordAlgorithm bellmanFordAlgorithm = new BellmanFordAlgorithm(vertexCount);
        bellmanFordAlgorithm.AddEdge(0, 1, 6);
        bellmanFordAlgorithm.AddEdge(0, 2, 7);
        bellmanFordAlgorithm.AddEdge(1, 2, 8);
        bellmanFordAlgorithm.AddEdge(1, 4, -4);
        bellmanFordAlgorithm.AddEdge(1, 3, 5);
        bellmanFordAlgorithm.AddEdge(2, 4, 9);
        bellmanFordAlgorithm.AddEdge(2, 3, -3);
        bellmanFordAlgorithm.AddEdge(3, 1, -2);
        bellmanFordAlgorithm.AddEdge(4, 3, 7);

        // 使用Bellman-Ford算法求解最短路径
        bellmanFordAlgorithm.FindShortestPath(0);
    }
}
Copier après la connexion

Ce qui précède est un exemple de code qui utilise le langage C# pour implémenter l'algorithme de Dijkstra et l'algorithme de Bellman-Ford. Avec ces deux algorithmes, nous pouvons résoudre le problème du chemin le plus court dans le graphe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment écrire un algorithme de prévision de séries chronologiques en utilisant C# Comment écrire un algorithme de prévision de séries chronologiques en utilisant C# Sep 19, 2023 pm 02:33 PM

Comment écrire un algorithme de prévision de séries chronologiques à l'aide de C# La prévision de séries chronologiques est une méthode permettant de prédire les tendances futures des données en analysant les données passées. Il a de nombreuses applications dans de nombreux domaines tels que la finance, les ventes et les prévisions météorologiques. Dans cet article, nous présenterons comment écrire des algorithmes de prévision de séries chronologiques en utilisant C#, avec des exemples de code spécifiques. Préparation des données Avant d'effectuer des prévisions de séries chronologiques, vous devez d'abord préparer les données. D’une manière générale, les données de séries chronologiques doivent être suffisamment longues et classées par ordre chronologique. Vous pouvez l'obtenir à partir de la base de données ou

Comment écrire des algorithmes d'apprentissage profond en utilisant C# Comment écrire des algorithmes d'apprentissage profond en utilisant C# Sep 19, 2023 am 09:53 AM

Comment utiliser C# pour écrire des algorithmes d'apprentissage profond Introduction : Avec le développement rapide de l'intelligence artificielle, la technologie d'apprentissage profond a obtenu des résultats révolutionnaires dans de nombreux domaines. Afin de mettre en œuvre l’écriture et l’application d’algorithmes d’apprentissage profond, le langage le plus couramment utilisé est actuellement Python. Cependant, pour les développeurs qui préfèrent utiliser le langage C#, il est également possible d’utiliser C# pour écrire des algorithmes de deep learning. Cet article explique comment écrire des algorithmes d'apprentissage profond à l'aide de C# et fournit des exemples de code spécifiques. 1. Créez un projet C# Avant de commencer à écrire un algorithme d'apprentissage en profondeur, vous devez d'abord créer.

Comment implémenter un algorithme glouton en C# Comment implémenter un algorithme glouton en C# Sep 19, 2023 am 11:48 AM

Comment implémenter l'algorithme glouton en C# L'algorithme glouton (algorithme Greedy) est une méthode de résolution de problèmes couramment utilisée. Il sélectionne à chaque fois la solution optimale actuelle dans l'espoir d'obtenir la solution optimale globale. En C#, nous pouvons utiliser des algorithmes gloutons pour résoudre de nombreux problèmes pratiques. Cet article présentera comment implémenter l'algorithme glouton en C# et fournira des exemples de code spécifiques. 1. Principes de base de l'algorithme glouton L'idée de base de l'algorithme glouton est de choisir à chaque fois la solution optimale actuelle, quel que soit l'impact possible des étapes ultérieures. Ce genre de pensée

Comment écrire un algorithme de recherche en largeur en utilisant C# Comment écrire un algorithme de recherche en largeur en utilisant C# Sep 19, 2023 am 11:45 AM

Comment utiliser C# pour écrire un algorithme de recherche en largeur d'abord La recherche en largeur d'abord (BFS) est un algorithme de recherche de graphiques couramment utilisé pour parcourir un graphique ou un arbre en fonction de la largeur. Dans cet article, nous explorerons comment écrire un algorithme de recherche en largeur en utilisant C# et fournirons des exemples de code concrets. Principe de l'algorithme Le principe de base de l'algorithme de recherche en largeur est de partir du point de départ de l'algorithme et d'étendre la plage de recherche couche par couche jusqu'à ce que la cible soit trouvée ou que l'intégralité du graphique soit parcourue. Il est généralement implémenté via des files d’attente.

Quelle est la manière d'implémenter le sondage dans Android ? Quelle est la manière d'implémenter le sondage dans Android ? Sep 21, 2023 pm 08:33 PM

L'interrogation sous Android est une technologie clé qui permet aux applications de récupérer et de mettre à jour des informations à partir d'un serveur ou d'une source de données à intervalles réguliers. En mettant en œuvre des sondages, les développeurs peuvent garantir la synchronisation des données en temps réel et fournir le contenu le plus récent aux utilisateurs. Cela implique d'envoyer des requêtes régulières à un serveur ou à une source de données et d'obtenir les dernières informations. Android fournit plusieurs mécanismes tels que des minuteries, des threads et des services en arrière-plan pour effectuer efficacement les interrogations. Cela permet aux développeurs de concevoir des applications réactives et dynamiques qui restent synchronisées avec les sources de données distantes. Cet article explique comment implémenter l'interrogation dans Android. Il couvre les principales considérations et étapes impliquées dans la mise en œuvre de cette fonctionnalité. Sondage Le processus de vérification périodique des mises à jour et de récupération des données à partir d'un serveur ou d'une source est appelé sondage dans Android. passer

Comment écrire l'algorithme de codage de Huffman en utilisant C# Comment écrire l'algorithme de codage de Huffman en utilisant C# Sep 21, 2023 pm 03:14 PM

Comment écrire l'algorithme de codage de Huffman en utilisant C# Introduction : L'algorithme de codage de Huffman est un algorithme sans perte utilisé pour la compression des données. Lors de la transmission ou du stockage des données, les données sont efficacement compressées en utilisant des codes plus courts pour les caractères plus fréquents et des codes plus longs pour les caractères moins fréquents. Cet article explique comment écrire l'algorithme de codage de Huffman en utilisant C# et fournit des exemples de code spécifiques. Le principe de base de l'algorithme de codage de Huffman L'idée principale de l'algorithme de codage de Huffman est de construire un arbre de Huffman. Premièrement, en comptant la fréquence des occurrences de caractères, le

Comment implémenter des effets de filtre d'image en PHP Comment implémenter des effets de filtre d'image en PHP Sep 13, 2023 am 11:31 AM

La méthode de mise en œuvre de l'effet de filtre d'image PHP nécessite des exemples de code spécifiques Introduction : Dans le processus de développement Web, les effets de filtre d'image sont souvent utilisés pour améliorer la vivacité et les effets visuels des images. Le langage PHP fournit une série de fonctions et de méthodes pour obtenir divers effets de filtre d'image. Cet article présentera certains effets de filtre d'image couramment utilisés et leurs méthodes de mise en œuvre, et fournira des exemples de code spécifiques. 1. Réglage de la luminosité Le réglage de la luminosité est un effet de filtre d'image courant, qui peut modifier la luminosité et l'obscurité de l'image. En utilisant imagefilte en PHP

Comment écrire un algorithme d'analyse de cluster en utilisant C# Comment écrire un algorithme d'analyse de cluster en utilisant C# Sep 19, 2023 pm 02:40 PM

Comment écrire un algorithme d'analyse de cluster à l'aide de C# 1. Présentation L'analyse de cluster est une méthode d'analyse de données qui sépare les points de données différents les uns des autres en regroupant les points de données similaires en clusters. Dans les domaines de l'apprentissage automatique et de l'exploration de données, l'analyse clusterisée est couramment utilisée pour créer des classificateurs, explorer la structure des données et découvrir des modèles cachés. Cet article explique comment utiliser C# pour écrire un algorithme d'analyse de cluster. Nous utiliserons l'algorithme K-means comme exemple d'algorithme et fournirons des exemples de code spécifiques. 2. Introduction à l'algorithme K-means L'algorithme K-means est le plus couramment utilisé

See all articles