DFS:生成树的存在

时间:2014-11-12 01:13:29

标签: c computer-science depth-first-search

可以使用深度优先搜索来确定某个图是否连接,因为可以访问未知大小的边和顶点数组,只有起始顶点作为输入数据?

struct node {
  int parent, rank;
};
typedef struct node node;

struct edge {
  int fromvertex, tovertex;
  float weight;
};
typedef struct edge edge;

node* nodes;
edge* edges;
int hasspantree(int startvertex)
{
  //find spanning tree?
}

在深度优先搜索之前运行的函数中分配节点和边,如下所示:

scanf("%d", nodecount);
scanf("%d", edgecount);
if ((nodes = malloc(*nodecount * sizeof(node))) == NULL) {
  printf("nodes malloc failed"); exit(1);
}
if((edges = malloc(*edgecount * sizeof(edge))) == NULL) {
  printf("edges malloc failed"); exit(1);
}

我可以根据这个函数声明来做到这一点:

int hasspantree(int startvertex, int edgecount, int nodecount)

但我希望能够使用之前的声明来做到这一点。

1 个答案:

答案 0 :(得分:0)

简短的回答是,鉴于你的数据(起始节点和2个未知大小的列表),这是不可能执行DFS的,因为你不知道你的图形(你不知道内存中是什么)与图形相关的数据或垃圾,因为你不知道如何停止)。所以你无法分析未知图。问题是图形的大小(通过图形的大小,我的意思是在您的情况下定义图形的2个数组的大小)是否是显式的(并且它不是,因为您的函数不需要大小参数)或隐式的(数据结构包含大小或具有指示它的特定方式)。因此,您可以使用终结符(NULL指针,类似于在字符串中使用NUL字符)来指示数组的结尾。此外,你可以有一个全局变量,但我们都知道这不是一个好习惯。