可以使用深度优先搜索来确定某个图是否连接,因为可以访问未知大小的边和顶点数组,只有起始顶点作为输入数据?
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)
但我希望能够使用之前的声明来做到这一点。
答案 0 :(得分:0)
简短的回答是,鉴于你的数据(起始节点和2个未知大小的列表),这是不可能执行DFS的,因为你不知道你的图形(你不知道内存中是什么)与图形相关的数据或垃圾,因为你不知道如何停止)。所以你无法分析未知图。问题是图形的大小(通过图形的大小,我的意思是在您的情况下定义图形的2个数组的大小)是否是显式的(并且它不是,因为您的函数不需要大小参数)或隐式的(数据结构包含大小或具有指示它的特定方式)。因此,您可以使用终结符(NULL指针,类似于在字符串中使用NUL字符)来指示数组的结尾。此外,你可以有一个全局变量,但我们都知道这不是一个好习惯。