Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何打印图形的路径(c编程)_C_Data Structures - Fatal编程技术网

如何打印图形的路径(c编程)

如何打印图形的路径(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

假设我想从图形结构打印路径。 我想打印从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);
    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);
   }