我被分配了一个要使用各种搜索技术解决的问题。该问题与逃离 Zurg问题或Bridge and Torch问题非常相似。我的问题是我不知道如何将数据表示为一棵树。
这是我对如何做到这一点的猜测,但它对搜索没有多大意义。
另一种方法是使用按步行时间排序的二叉树。但是,我仍然不确定我是否正确地解决了这个问题,因为搜索算法不一定需要二叉树。
任何有关表示此数据的提示将不胜感激。
我被分配了一个要使用各种搜索技术解决的问题。该问题与逃离 Zurg问题或Bridge and Torch问题非常相似。我的问题是我不知道如何将数据表示为一棵树。
这是我对如何做到这一点的猜测,但它对搜索没有多大意义。
另一种方法是使用按步行时间排序的二叉树。但是,我仍然不确定我是否正确地解决了这个问题,因为搜索算法不一定需要二叉树。
任何有关表示此数据的提示将不胜感激。
通常,当您使用树搜索来解决问题时,每个节点代表世界的一些可能“状态”(例如,谁在桥的哪一侧),每个节点的子节点代表所有可能的“继任状态” (可以从前一个状态一步到达的新状态)。然后,深度优先搜索表示尝试一个选项直到它死胡同,然后备份到另一个选项可用的最后一个状态并尝试它。广度优先搜索表示并行尝试许多选项并查看它们中的第一个何时找到目标节点。
就编码的实际方式而言,您可以将其表示为多路树。每个节点可能包含当前状态,以及指向子节点的指针列表。
希望这可以帮助!
你可以使用这样的东西:
public class Node
{
public int root;
public List<Node> neighbours;
public Node(int x)
{
root=x;
}
public void setNeighboursList(List<Node> l)
{
neighbours = l;
}
public void addNeighbour(Node n)
{
if(neighbours==null) neighbours = new ArrayList<Node>();
neighbours.add(n);
}
...
}
public class Tree
{
public Node root;
....
}