在C#中,可以通过以下步骤来寻找无向图中的路径:

  1. 创建一个Graph类来表示无向图,该类包含一个字典,其中键是节点,值是该节点的所有邻居节点的列表。

  2. 创建一个PathFinder类来实现路径查找算法。该类应该包含一个方法,该方法接受起点和终点节点作为参数,并返回一条从起点到终点的路径。

  3. 在PathFinder类的方法中,使用广度优先搜索或深度优先搜索算法来查找从起点到终点的路径。在搜索过程中,需要记录已经访问过的节点和当前路径。

  4. 如果找到了一个路径,返回该路径。如果没有找到路径,则返回空值。

以下是一个示例代码,用于基于深度优先搜索算法查找无向图中的路径:

using System;
using System.Collections.Generic;

class Graph
{
    private Dictionary<int, List<int>> adjList = new Dictionary<int, List<int>>();

    public void AddEdge(int v, int w)
    {
        if (!adjList.ContainsKey(v))
            adjList.Add(v, new List<int>());
        adjList[v].Add(w);

        if (!adjList.ContainsKey(w))
            adjList.Add(w, new List<int>());
        adjList[w].Add(v);
    }

    public List<int> GetNeighbors(int v)
    {
        return adjList[v];
    }
}

class PathFinder
{
    private Graph graph;
    private bool[] visited;
    private int[] parent;

    public PathFinder(Graph graph)
    {
        this.graph = graph;
        visited = new bool[graph.GetNeighbors(0).Count];
        parent = new int[graph.GetNeighbors(0).Count];
    }

    public List<int> FindPath(int start, int end)
    {
        Dfs(start, end);
        return BuildPath(start, end);
    }

    private void Dfs(int v, int end)
    {
        visited[v] = true;

        if (v == end)
            return;

        foreach (int neighbor in graph.GetNeighbors(v))
        {
            if (!visited[neighbor])
            {
                parent[neighbor] = v;
                Dfs(neighbor, end);
            }
        }
    }

    private List<int> BuildPath(int start, int end)
    {
        List<int> path = new List<int>();
        int curr = end;

        while (curr != start)
        {
            path.Add(curr);
            curr = parent[curr];
        }

        path.Add(start);
        path.Reverse();

        return path;
    }
}

class Program
{
    static void Main()
    {
        Graph graph = new Graph();
        graph.AddEdge(1, 2);
        graph.AddEdge(1, 3);
        graph.AddEdge(2, 4);
        graph.AddEdge(3, 5);
        graph.AddEdge(4, 5);

        PathFinder pathFinder = new PathFinder(graph);
        List<int> path = pathFinder.FindPath(1, 5);

        foreach (int node in path)
            Console.Write(node + " ");
    }
}
``
c# 无向图寻路

原文地址: https://www.cveoy.top/t/topic/hhLc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录