【发布时间】:2021-11-15 09:23:17
【问题描述】:
再次更新这篇文章。
这次是为了让事情更清楚。
我正在尝试解析大小为 9x9 的 Grid,但这个大小会随着时间的推移而改变,它不是固定的。这是一款名为Quoridor 的棋盘游戏。我可以使用的是Board 课程。这为我提供了以下horizontal bool[,] 和vertical bool[,],我可以遍历每个并打印出x, y 位置。但这些会有所不同,具体取决于它是水平方向,还是垂直方向和位置。
玩家可以仅移动一步向北、向南、向西或向东移动。另一个玩家(人类)可以放置一堵水平或垂直覆盖两个街区的墙(障碍物)。我的自动播放器必须从棋盘上构建一个节点图,并根据棋盘上的变化和它自己的位置刷新图表。例如,如果玩家不能从当前位置向左走,那么连接两个节点之间的一条边将被删除,除非是由障碍物引起的。然后 BFS 将再次针对 Graph 运行并返回该(自动)玩家使用并执行其移动的新位置 (x, y)。
9x9 网格上的每个块,将代表Graph 中的一个 Node。这意味着Graph 中的顶点或节点数 List 将是 9x9=81。每个Nodes 都持有size 4 中的list 或2D array,用于代表North、South、West 和East,可以是 bool 类型。
现在,我提供了我编写的Graph 类的示例代码以及Node 类。我希望这里的最新信息能说明问题。我已经实现了 BFS 算法。但这部分是我无法正确理解的。为了一些想法,我观看了这个视频:https://www.youtube.com/watch?v=KiCBXu4P-2Y
代码
class Graph<T>
{
private int _V;
private List<T>[] _Nodes;
public Graph(int v)
{
_V = v;
_Nodes = new List<T>[v];
for (int i = 0; i < _Nodes.Length; i++)
_Nodes [i] = new List<T>();
}
public IEnumerable<T> Nodes(int v) { return (IEnumerable<T>)_Nodes[v];}
public int V { get => _V; }
public bool EdgeExists(){}
public void AddEdge(Node n, T u, T w){}
public void RemoveEdge(){}
}
和,
class Node<T>
{
private int _E;
private List<T>[] _Adj;
public Node(int e)
{
_E = e;
_Adj = new List<T>[e];
for (int i = 0; i < _Adj.Length; i++)
_Adj [e] = new List<T>();
}
public IEnumerable<T> Adj(int e) { return (IEnumerable<T>)_Adj[e];}
public int E { get => _E; }
public void AddEdge(Node n, T u, T w){}
public void RemoveEdge(T value){}
}
我阅读了以下 SO 主题:
- How can you make an adjacency matrix which would emulate a 2d grid
- Implementing 2D Grid Network ( Graph ) and Adjacency Matrix of it in C
- Representing a graph with a 2D array
- How can I build a graph from a 2D array?
- Creating an adjacency list graph from a matrix in python
- https://docs.microsoft.com/en-us/previous-versions/ms379574(v=vs.80)?redirectedfrom=MSDN
- How can I make my BFS algorithm run faster?
【问题讨论】:
-
您真正想做的是什么?没有任何背景信息,很难判断您是否走在正确的轨道上。
-
你取第一个 0,0,然后存储它最近的邻居。
-
@JonasH,请参阅我的编辑。感谢您的提问。
-
@JonasH,你认为这是正确的方向吗?我正在尝试为 Quoridor 游戏构建一个包含位置和邻居的 9x9 网格图。
-
_我不明白,如何将此信息存储在节点和邻居为 4 的图中。_ 你不明白。您将节点存储在图中(可以是一个简单的列表)。每个节点都存储有关其邻居的信息。