如何打印图形的路径(c编程)
假设我想从图形结构打印路径。 我想打印从B到G的路径:它是B A E G,但当我运行我的程序时,它也是打印D。我先这样使用横向宽度如何打印图形的路径(c编程),c,data-structures,C,Data Structures,假设我想从图形结构打印路径。 我想打印从B到G的路径:它是B A E G,但当我运行我的程序时,它也是打印D。我先这样使用横向宽度 void traverseBreadFirst(VERTEX_t* pVertex,void (*vfunction)(VERTEX_T)) { VERTEX_T * pCurrent = NULL; VERTEX_T * pAdjacent = NULL; queueClear(); colorAll(WHITE); pVe
void traverseBreadFirst(VERTEX_t* pVertex,void (*vfunction)(VERTEX_T))
{
VERTEX_T * pCurrent = NULL;
VERTEX_T * pAdjacent = NULL;
queueClear();
colorAll(WHITE);
pVertex->color = GRAY;
enqueue(pVertex);
while(queueSize()>0)
{
pCurrent = (VERTEX_T*)dequeue();
if(pCurrent->color != BLACK)
{
(*vFunction)(pCurrent);
pCurrent->color = BLACK;
ADJACENT_T *pRef = pCurrent->adjacentHead;
while(pRef != NULL)
{
pAdjacent = (VERTEX_T*) pRef->pVertex;
if(pAdjacent->color != BLACK)
{
pAdjacent->color = GRAY;
enqueue(pAdjacent);
}
pRef = pRef->next;
}
}
} //end while queue has data
}
这是我的打印路径函数(它工作不正常,是递归的)
你们有什么建议如何正确地做到这一点吗?我将不胜感激。这是我的第一个问题,很抱歉语法不好。当您访问
traverseBreadFirst
函数中的每个节点时:您有以下几行:
if(pAdjacent->color != BLACK)
{
pAdjacent->color = GRAY;
enqueue(pAdjacent);
}
您需要在其中添加一些内容,以便将pAdjacent
链接回pCurrent
。例如:按如下方式更改:
if(pAdjacent->color != BLACK)
{
pAdjacent->color = GRAY;
pAdjacent->backwards = pCurrent;
enqueue(pAdjacent);
}
当然,如果您使用这个精确的代码,那么您需要将VERTEX\u T*向后
添加到VERTEX\u T
结构中。但是,您可以采用不同的方式(例如:使用hashmap),只要最后您能够计算出当函数的该部分运行时,每个节点的backwards
是什么
然后打印:从末尾开始,并通过向后跟踪来生成列表,然后当到达开头时可以向前打印。请格式化代码,使其可读。对不起,这是我的第一个问题。设置代码的格式是什么意思?您应该解释VERTEX_T结构并告诉我们如何填充它。给我们举一个有数据的例子会更好。快速注释:traverseBreadFirst函数没有使用pEnd,因此它如何找到路径?你的代码中也没有递归性。你的意思是像VERTEX\T结构中的内容一样?我把pEnd换成了pVertex@asiandudeCom我“格式化”了您的代码,但它可能丢失了您最近进行的编辑,如果很抱歉,请重试。
if(pAdjacent->color != BLACK)
{
pAdjacent->color = GRAY;
pAdjacent->backwards = pCurrent;
enqueue(pAdjacent);
}