C DFS找到所有可能的路径-我哪里出错了?
我需要实现DFS以从一个顶点找到所有可能的路径,比如“item”C DFS找到所有可能的路径-我哪里出错了?,c,graph-traversal,C,Graph Traversal,我需要实现DFS以从一个顶点找到所有可能的路径,比如“item” 到目前为止,我有以下几点,我不明白我哪里出了问题 void dfs() { int i; for(i=1;i<=nodecount;i++) { visited[i]=0; } push(item); while(top!=0) { pop(); visited[item]=1; for(i=1;i<
到目前为止,我有以下几点,我不明白我哪里出了问题
void dfs()
{
int i;
for(i=1;i<=nodecount;i++)
{
visited[i]=0;
}
push(item);
while(top!=0)
{
pop();
visited[item]=1;
for(i=1;i<nodecount;i++)
{
if(topo[item][i]==1)
{
if(visited[i]==0)
{
item=i;
visited[i]=1;
push(item);
}
}
}
}
}
void dfs()
{
int i;
对于(i=1;i我认为您不应该在访问[i]==0
时覆盖(中断)项
此外,范围在初始化和DFS方面有所不同
还有一些修正
void dfs()
{
int i;
for(i=1;i<=nodecount;i++)
{
visited[i]=0;
}
visited[item]=1; /* add this to mark the start point as visited */
push(item);
while(top!=0)
{
pop();
/* delete visited[item]=1; here */
for(i=1;i<=nodecount;i++) /* changed < to <= */
{
if(topo[item][i]==1)
{
if(visited[i]==0)
{
visited[i]=1; /* item is unchanged unless push change it */
push(i);
}
}
}
}
}
那么递归函数呢
void dfs(int item) {
int i;
push(item);
visited[item] = 1;
pstack();
for(i=1; i<nodecount; i++) {
if ((nodes[item][i] == 1) && (visited[i] == 0)) {
dfs(i);
visited[i] = 0;
}
}
pop();
}
我将'item'作为函数的一个参数。注意:从1开始计数并不是真正的C-aware:)您认为哪里不对?如果item为“1”,我得到的不是像“1 2 4 5”这样的路径,而是“2 3 2 4”或者类似的东西。首先,节点在重复,即使我跟踪访问了哪些节点。其次,源(项)不在路径中的节点列表中。while(top!=0){…}
您没有更改top
的值,是吗?但是,您需要提供更多信息。您需要创建一个。我正在使用top=0作为空堆栈感谢@user24603抱歉,应该使用I
而不是项
。已编辑。我尝试了您建议的新编辑。它仍然无法按我想要的方式工作。仍然获得与原始代码相同的输出。
void dfs(int item) {
int i;
push(item);
visited[item] = 1;
pstack();
for(i=1; i<nodecount; i++) {
if ((nodes[item][i] == 1) && (visited[i] == 0)) {
dfs(i);
visited[i] = 0;
}
}
pop();
}
. 2
. 2 1
. 2 1 4
. 2 1 4 5
. 2 1 4 5 3
. 2 3
. 2 3 5
. 2 3 5 4
. 2 3 5 4 1
. 2 4
. 2 4 1
. 2 4 5
. 2 4 5 3