【问题标题】:total vertices without edges C无边的总顶点数 C
【发布时间】:2013-02-07 22:57:52
【问题描述】:

所以我正在准备考试,发现以下问题我无法理解如何解决:

图表:

        typedef struct NODE{
             int weight;
             int idEdge;
             int idDestination;
             struct NODO *next;
        }Node;

并遵循这个原型:

    int totVertexWithoutEdges(Node **g, int totv)

我必须创建一个函数,它可以为我提供没有边的顶点总数,但我不知道该怎么做,谁能解释我应该如何解决它,而不是要求答案只是一些步骤来达到它.

【问题讨论】:

  • 你的结构叫做NODE,但它似乎代表了一条边(因为它指定了源和目标)。这是故意的吗?
  • 不确定,这是我老师考试时写的

标签: c algorithm graph


【解决方案1】:

一种方法是创建一个数组,每个节点有一个条目。最初,将此数组中的所有元素设置为 0。

然后,遍历所有边。对于每条边,将表示与源节点(和/或目标节点,具体取决于您如何解释问题)对应的数组元素的数组元素更改为 1。这标志着该节点有一条边与之相连。

最后,遍历数组并计算 0 条目的数量,这会告诉您没有传入/传出边的节点总数。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您的 totVertexWithoutEdges 只需要浏览您的 Node** g,这将是指向链表的指针的地址。

    可能类似于(基于最后一个元素指向 NULL 的事实)

    while (*g != NULL)
    {
         // Check out what you want about your edge things
         g = &(*g)->next;
    }
    

    但是如果totv代表顶点数,那就是

    int   counter;
    
    counter = 0;
    while (counter < totv)
    {
         // Check out what you want about your edge things
         g = &(*g)->next;
         counter = counter + 1;
    }
    

    链表是一种众所周知的数据结构 ;),祝你练习顺利。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2023-01-15
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多