C 图DFS的实现
我试图实现一个图形并在C中执行DFS。但是DFS操作会导致一个错误,即一旦指针x从相邻节点的队列中跑出,w就会被分配一个随机值。条件=NULL似乎什么都不做。我希望它在队列清空后立即中断,如何实现这一点 我还想知道,如何实现运行时版本的节点数?我认为C不支持数组的动态实例。我应该声明一个非常大的数组并使用它吗C 图DFS的实现,c,graph,depth-first-search,C,Graph,Depth First Search,我试图实现一个图形并在C中执行DFS。但是DFS操作会导致一个错误,即一旦指针x从相邻节点的队列中跑出,w就会被分配一个随机值。条件=NULL似乎什么都不做。我希望它在队列清空后立即中断,如何实现这一点 我还想知道,如何实现运行时版本的节点数?我认为C不支持数组的动态实例。我应该声明一个非常大的数组并使用它吗 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> struct node {
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
struct node {
int data;
struct node* next;
};
void add(struct node **bag, int data) {
struct node *newnode = malloc(sizeof(struct node));
newnode->data = data;
newnode->next = *bag;
*bag = newnode;
}
int V;
struct node *adj[7];
bool marked[7];
int edgeTo[7 * 6];
void initialize() {
int i = 0;
for (i = 0; i < 7; ++i) {
adj[i] = malloc(sizeof(struct node));
marked[i] = false;
}
}
void addEdge(int v, int w) {
add(&adj[v], w);
add(&adj[w], v);
}
void dfs(int v) {
printf("%d ", v);
marked[v] = true;
struct node *x = adj[v];
while (x != NULL) {
int w = x->data;
if (marked[w] == false) {
dfs(w);
}
x = x->next;
}
}
int main(int argc, char **argv) {
initialize();
addEdge(0, 1);
addEdge(0, 2);
addEdge(0, 5);
addEdge(1, 4);
addEdge(3, 2);
addEdge(3, 4);
addEdge(3, 5);
addEdge(3, 6);
addEdge(5, 2);
addEdge(6, 0);
addEdge(6, 4);
dfs(0);
printf("done");
return 0;
}
#包括
#包括
#包括
结构节点{
int数据;
结构节点*下一步;
};
无效添加(结构节点**包,整数数据){
结构节点*newnode=malloc(sizeof(结构节点));
新建节点->数据=数据;
新建节点->下一步=*行李;
*bag=newnode;
}
INTV;
结构节点*adj[7];
布尔标记[7];
int edgeTo[7*6];
void initialize(){
int i=0;
对于(i=0;i<7;++i){
adj[i]=malloc(sizeof(struct node));
标记为[i]=假;
}
}
无效补遗(整数v,整数w){
添加(&adj[v],w);
添加(&adj[w],v);
}
无效dfs(整数v){
printf(“%d”,v);
标记为[v]=真;
结构节点*x=adj[v];
while(x!=NULL){
int w=x->数据;
如果(标记为[w]==false){
dfs(w);
}
x=x->next;
}
}
int main(int argc,字符**argv){
初始化();
增补(0,1);
增补(0,2);
增补(0,5);
增编(1,4);
增编(3,2);
增编(3,4);
增编(3,5);
增编(3,6);
增编(5,2);
增补(6,0);
增编(6,4);
dfs(0);
printf(“完成”);
返回0;
}
您没有正确编码初始化方法。确保初始化next to nulladj[i]->next=null代码>
void initialize() {
int i = 0;
for (i = 0; i < 7; ++i) {
adj[i] = (node*)malloc(sizeof(struct node));
marked[i] = false;
adj[i]->data = 0;
adj[i]->next = NULL;
}
}
void initialize(){
int i=0;
对于(i=0;i<7;++i){
adj[i]=(node*)malloc(sizeof(struct node));
标记为[i]=假;
adj[i]->数据=0;
adj[i]->next=NULL;
}
}
您没有正确编码初始化方法。确保初始化next to nulladj[i]->next=null代码>
void initialize() {
int i = 0;
for (i = 0; i < 7; ++i) {
adj[i] = (node*)malloc(sizeof(struct node));
marked[i] = false;
adj[i]->data = 0;
adj[i]->next = NULL;
}
}
void initialize(){
int i=0;
对于(i=0;i<7;++i){
adj[i]=(node*)malloc(sizeof(struct node));
标记为[i]=假;
adj[i]->数据=0;
adj[i]->next=NULL;
}
}
您没有正确编码初始化方法。确保初始化next to nulladj[i]->next=null代码>
void initialize() {
int i = 0;
for (i = 0; i < 7; ++i) {
adj[i] = (node*)malloc(sizeof(struct node));
marked[i] = false;
adj[i]->data = 0;
adj[i]->next = NULL;
}
}
void initialize(){
int i=0;
对于(i=0;i<7;++i){
adj[i]=(node*)malloc(sizeof(struct node));
标记为[i]=假;
adj[i]->数据=0;
adj[i]->next=NULL;
}
}
您没有正确编码初始化方法。确保初始化next to nulladj[i]->next=null代码>
void initialize() {
int i = 0;
for (i = 0; i < 7; ++i) {
adj[i] = (node*)malloc(sizeof(struct node));
marked[i] = false;
adj[i]->data = 0;
adj[i]->next = NULL;
}
}
void initialize(){
int i=0;
对于(i=0;i<7;++i){
adj[i]=(node*)malloc(sizeof(struct node));
标记为[i]=假;
adj[i]->数据=0;
adj[i]->next=NULL;
}
}
简单地说,您的程序充满了内存泄漏。为什么要分配两次内存?不要为adj
分配内存,也要记住在分配后释放它。如果你是C新手,在编写(或从别处复制粘贴)这样的代码之前,你应该学习更多关于内存管理的知识。对于动态数组,还要检查C中的链表。请解释预期的输出是什么以及您得到的结果是什么。当我运行此命令时,我得到:0 6 4 3 5 2 1 done
这不是您想要的吗?很快,您的程序充满了内存泄漏。为什么要分配两次内存?不要为adj
分配内存,也要记住在分配后释放它。如果你是C新手,在编写(或从别处复制粘贴)这样的代码之前,你应该学习更多关于内存管理的知识。对于动态数组,还要检查C中的链表。请解释预期的输出是什么以及您得到的结果是什么。当我运行此命令时,我得到:0 6 4 3 5 2 1 done
这不是您想要的吗?很快,您的程序充满了内存泄漏。为什么要分配两次内存?不要为adj
分配内存,也要记住在分配后释放它。如果你是C新手,在编写(或从别处复制粘贴)这样的代码之前,你应该学习更多关于内存管理的知识。对于动态数组,还要检查C中的链表。请解释预期的输出是什么以及您得到的结果是什么。当我运行此命令时,我得到:0 6 4 3 5 2 1 done
这不是您想要的吗?很快,您的程序充满了内存泄漏。为什么要分配两次内存?不要为adj
分配内存,也要记住在分配后释放它。如果你是C新手,在编写(或从别处复制粘贴)这样的代码之前,你应该学习更多关于内存管理的知识。对于动态数组,还要检查C中的链表。请解释预期的输出是什么,以及您得到的结果是什么。当我运行此命令时,我得到:0643552 1 done
这不是您想要的吗?