c# 无向图寻路
在C#中,可以通过以下步骤来寻找无向图中的路径:
-
创建一个Graph类来表示无向图,该类包含一个字典,其中键是节点,值是该节点的所有邻居节点的列表。
-
创建一个PathFinder类来实现路径查找算法。该类应该包含一个方法,该方法接受起点和终点节点作为参数,并返回一条从起点到终点的路径。
-
在PathFinder类的方法中,使用广度优先搜索或深度优先搜索算法来查找从起点到终点的路径。在搜索过程中,需要记录已经访问过的节点和当前路径。
-
如果找到了一个路径,返回该路径。如果没有找到路径,则返回空值。
以下是一个示例代码,用于基于深度优先搜索算法查找无向图中的路径:
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 + " ");
}
}
``
原文地址: https://www.cveoy.top/t/topic/hhLc 著作权归作者所有。请勿转载和采集!