- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 C 实现具有层级的 DFS 函数,但是层中的相应值在根节点的邻居中不正确,我看不出代码有什么问题。
让我们考虑以下圆图:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 1;
当我从节点4开始DFS时,层计算返回:
Marked Items: node[1] with level = 7
Marked Items: node[2] with level = 8
Marked Items: node[3] with level = 2
Marked Items: node[4] with level = 1
Marked Items: node[5] with level = 2
Marked Items: node[6] with level = 3
Marked Items: node[7] with level = 4
Marked Items: node[8] with level = 5
Marked Items: node[9] with level = 6
这对所有节点都是正确的,除了节点 3,它应该在级别 9。
最后是代码:
void dfsFromMatrix(uint64_t **matrix, unsigned vertexes, unsigned root) {
unsigned *markedItems;
stack *stack;
unsigned tempVertex;
unsigned i;
unsigned level = 1;
#ifdef _DEBUG_
printf("\n\nDFS: Start\n");
#endif
/* Alocar um vértice a mais, visto que a posição 0 não é utilizada */
markedItems = (unsigned *) calloc(vertexes + 1, sizeof(unsigned));
stack = NULL;
stack = stackPush(stack, root);
markedItems[root] = 1;
#ifdef _DEBUG_
printf("DFS: Starting from vertex: %u\n", root);
printf("DFS: Marquei o vértice raiz: %u\n", root);
#endif
while (!stackIsEmpty(stack)) {
tempVertex = stack -> data;
stack = stackPop(stack);
printf("%u \n", tempVertex);
level++;
/* Não sei qual a diferença em inverter o loop */
for (i = 1 ; i <= vertexes ; i++)
//for (i = vertexes ; i > 0 ; --i)
if (getValueFromMatrix(matrix, tempVertex, i) && !markedItems[i]) {
stack = stackPush(stack, i);
if (level != markedItems[tempVertex]+1)
level = markedItems[tempVertex]+1;
markedItems[i] = level;
#ifdef _DEBUG_
printf("DFS: Marquei o vértice %u ligado ao vértice %u\n", i, tempVertex);
#endif
}
}
for (i = 1 ; i <= vertexes ; i++)
printf("Marked Items: node[%u] with level = %u\n",i,markedItems[i]);
}
最佳答案
我找到了解决方案。这是算法
void dfsFromMatrix(uint64_t **matrix, unsigned vertexes, unsigned root) {
unsigned *markedItems;
unsigned *pai;
stack *stack;
unsigned tempVertex;
unsigned i;
unsigned *level = (unsigned *) malloc((vertexes + 1) * sizeof(unsigned));
#ifdef _DEBUG_
printf("\n\nDFS: Start\n");
#endif
/* Alocar um vértice a mais, visto que a posição 0 não é utilizada */
markedItems = (unsigned *) calloc(vertexes + 1, sizeof(unsigned));
/* Não preciso inicializar esse vetor */
pai = (unsigned *) malloc((vertexes + 1) * sizeof(unsigned));
stack = NULL;
stack = stackPush(stack, root);
level[root] = 0;
#ifdef _DEBUG_
printf("DFS: Starting from vertex: %u\n", root);
printf("DFS: Marquei o vértice raiz: %u\n", root);
#endif
while (!stackIsEmpty(stack)) {
tempVertex = stack -> data;
stack = stackPop(stack);
printf("\nTirei %u da pilha!\n", tempVertex);
printf("%u esta com marcacao %u!\n", tempVertex, markedItems[tempVertex]);
printf("Vetor de Marcações:\n");
for (i = 0 ; i <= vertexes ; i++) {
printf("markedItems[%u] = %u\n", i, markedItems[i]);
}
if (!markedItems[tempVertex]) {
printf("Marquei %u\n", tempVertex);
markedItems[tempVertex] = 1;
/* Não sei qual a diferença em inverter o loop */
for (i = 1 ; i <= vertexes ; i++) {
//for (i = vertexes ; i > 0 ; --i)
if (getValueFromMatrix(matrix, tempVertex, i) && !markedItems[i]) {
stack = stackPush(stack, i);
printf("Coloquei %u da pilha!\n", i);
pai[i] = tempVertex;
level[i] = level[tempVertex] + 1;
printStack(stack);
}
}
}
}
}
关于c - 来自 DFS 的生成树导致错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18950915/
我正在寻找我的代码的复杂度计算。简单来说就是DFS中的DFS(depth first search)。 DFS 从头到尾(向后搜索)在图(状态机)上运行。每当到达开始时,它都会累积使其到达开始的字符串
我通过实现堆栈编写了一个迭代 DFS。现在我试图递归地编写相同的 DFS,但我遇到了问题。 我的问题是,当我迭代编写它时,我可以保留某些全局变量,例如 paths=[] 并在找到新路径时添加到其中。
此程序用于图的 dfs 遍历,一个函数是迭代方法,另一个函数是递归方法,但两者给出的答案不同从迭代中我得到 01234从递归我得到 02341 谁能解释我为什么? NOTE -> User is en
这个问题在这里已经有了答案: Iterative DFS vs Recursive DFS and different elements order (4 个答案) 关闭 8 年前。 我试图了解 D
首先请原谅我的英语这可能不太可能,或者以前没有人经历过这种情况,我真的非常需要帮助。这可能是我第一次在这里提问 我正在尝试在 azure 订阅中的两台服务器(LIVE1 和 LIVE2)上设置 dfs
我以迭代方式和递归方式实现了深度优先搜索算法。它们对于小尺寸(小于 1 MB)的文件都可以正常工作。然而,当我尝试在 50 MB 的文件上运行它们时,递归 DFS(9 秒)似乎比使用迭代方法(至少几分
我正在解决这个 dfs/bfs问题。 我编写了 DFS 的迭代版本和递归版本。 节点访问的顺序不同,我不明白为什么。 迭代 DFS: static void DFS (Integer root, Gr
我遇到了一个问题,我要在图中寻找一种特殊类型的节点。该算法按以下方式工作: bool findSpecial(Node n) { if(isSpecial(n)) return
我写了一个递归DFS算法来遍历一个图: void Graph::DFS(Node n) { std::cout void Graph::IterativeDFS(Node n) {
在我的算法中,我将通过 DFS 方法创建频繁模式,例如,我生成 A-A, A-A-B, A-A-B-C, .. .顺序。(这三种模式为频繁子图模式,A,B,C为节点,- 表示两个节点之间存在一条边。)
我对 hadoop 中的 dfs 有疑问。有人知道如何解决我的问题吗? [hduser@evghost ~]$ start-dfs.sh Starting namenodes on [evghost]
据说在未加权的图中不能用DFS求最短路径。我已阅读多篇文章和博客,但并不满意,因为对 DFS 稍加修改就可以实现。 我认为如果我们以这种方式使用改进的 DFS,那么我们可以找到距源的最短距离。 Ini
考虑到一个具有 14,000 个顶点和 14,000 个边的图,我想知道为什么 GraphX 比图的 java 实现花费更多的时间来获取从顶点到叶子的所有路径? java 实现:几秒钟 Graphx
我已按照 Apache“单节点设置”说明在单节点上设置 dfs.replication。 但是后来我按照“Cluster Setup”进行操作,但它没有提到这个属性,所以我不知道这是要在 Nameno
有没有办法修改 pd.read_html 使其返回数据帧而不是数据帧列表? 语境: 我正在尝试使用 pandas read_html 从网站导入表格。我知道 pd.read_html 返回一个 dfs
为什么 hdfs dfs -ls 指向与 hdfs dfs -ls/ 不同的位置? 从下面的截图中可以清楚地看到两个命令给出不同的输出: 以上输出的主要原因是什么? 最佳答案 来自官方源码org.ap
我没有在 hdfs-site.xml 文件中设置 dfs.name.dir 和 dfs.data.dir 值没有设置。他们会怎样?有趣的是,他们默认接受什么值? (如何接收他们的当前值?) 最佳答案
我试图用一个名称节点和四个数据节点配置 hadoop。我能够在一台机器上成功配置名称节点和作业跟踪器并将其启动。 但是在我要配置数据节点的机器上,我做了以下操作: 我将 hadoop-2.0.0-cd
我正在尝试在 ec2-instance 上安装 Hadoop-2.6.0。 我下载并安装了 Hadoop。我还设置了环境变量。尝试启动 hdfs 服务时出现以下错误。 [ec2-user@ip-10-
我是 hadoop 框架的新手,目前我正在处理大数据项目,在 Windows 7 中使用 cygwin、hadoop-0.19.1、eclipse-3.3.1 (Europa)。现在我正在尝试从 ha
我是一名优秀的程序员,十分优秀!