我已经编写了深度优先搜索,返回目标节点所在的深度,如果没有找到路径,返回的深度为-1。算法有效,但我需要加快速度。这是函数
def depth(dic, head, target):
if(head==target):
return
depth=1
que = deque()
que.append('|') #used to mark end of each breadth so i can count depth correctly
used = list()
add = True
while(que)
我正在尝试用C++编写Dijkstra算法,在互联网上有无数的例子,但我似乎就是不能掌握这些例子是如何工作的。我更愿意以一种对我有意义的方式来做,这样我就可以更好地理解算法。我知道算法本身应该如何工作,并且我已经写了一些代码。我想知道是否有人能指出我思维过程中的缺陷。我选择将我的图表示为边列表。我将用伪代码编写,因为我的实际代码是一个巨大的混乱:
class Node{
vector<node> linkVector; //links to other nodes, generated at random
int cost;
我找到了二叉树和其他类型的树。
我不明白如何为一个通用的树做一个搜索方法。
我想出的东西是这样的
comparable Search(GeneralTreeNode node, comparable key){
if(node != root){
if(root.getChildren().contains(node))
return node.key;
}
else return // I dont know what to do next ???????
}
}
我的类将root作为我的通用树节点,将key作为可比较的对象。
我正在学习图中的桥。
我有以下C#代码(也可以在fiddle -中获得):
using System;
using System.Collections.Generic;
public class Program
{
public class Graph
{
private int[,] adjMatrix;
public Graph(int vertices)
{
adjMatrix = new int[vertices, vertices];
}
public in
我的算法
假设我有一个二维的实数数组。我从这个数组中的一个特定的单元格开始,其中包含一个特别大的数字。我想标记其他单元格中的哪个应该属于上述开始单元格。规则是这样的:如果我找到了从开始单元格到另一个单元格的步行方式,则另一个单元格属于开始单元格。我只能在牢房里上下走动。我只能从一个数字较高的牢房走到一个号码较低的牢房。下面是我从中心9开始的一个例子
我的伪算法是
function Step(cellNr):
foreach neighborNr in neighbors_of(cellNr):
if array_value(neighborNr) < a
我对dfs的理解是使用堆栈(bfs使用队列)。但是,如果我想遍历dfs中的矩阵。我该怎么做?
假设我有一个矩阵,我想找到一条从左上角到右下角的路径,它只能向下和向右移动。
public void dfsHelper(int[][] matrix, int i, int j ){
if (i >= row || j >= col) return;
if (i == row - 1 && j == col - 1) {
return;
}
dfsHelper(matrix, min, i,