范文无忧网范文学习范文大全

C语音算法图的广度优先算法实现代码

02月17日 编辑 fanwen51.com

[求进程调度算法]进程调度源程序如下: jingchendiaodu.cpp #include "stdio.h" #include#include#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程...+阅读

深度优先遍历算法(Depth-first-search),重点关注的是图的连通性(connectivity),即从图中给定的一点都能访问到哪些点。不仅如此,在遍历这些点的过程中,通过记录访问次序,可以实现其他功能,比如测试该图是否有闭环等。 广度优先遍历算法(Breadth-first-search),是为了寻找两个节点之间的最短路径。如果把图中每一点看作是一个乒乓球,每一条边都用线连起来,那么提起图中的某一点,即可形成一棵广度优先遍历树。

在学习C的过程中,Valgrind是一个很好的工具,用来测试有没有内存泄漏,对提高自己的代码质量有很大的帮助! 具体代码如下: graph.h [cpp] view plaincopyprint? #ifndef H_GRAPH #define H_GRAPH typedef struct _node { char *data; char flag; struct _node **adjacency_nodes; int alength; } vertex; typedef struct _graph { vertex **node_list; int length; } graph; #endif #ifndef H_GRAPH #define H_GRAPH typedef struct _node { char *data; char flag; struct _node **adjacency_nodes; int alength; } vertex; typedef struct _graph { vertex **node_list; int length; } graph; #endif dfs.h [cpp] view plaincopyprint? #ifndef H_DFS #define H_DFS #include "graph.h" char **pre, **post; int explore(vertex *); int previsit(vertex *); int postvisit(vertex *); int dfs(graph *); int explore(vertex *node) { if (node->flag == 1) return; previsit(node); int i = 0; while (i++alength) { explore(*node->adjacency_nodes++); } postvisit(node); } int previsit(vertex *node) { *pre = (char *)malloc(sizeof(char)); *pre++ = node->data; } int postvisit(vertex *node) { *post = (char *)malloc(sizeof(char)); *post++ = node->data; node->flag = 1; } int dfs(graph *list) { int i = 0; while (i++length & (*list->node_list)->flag == 0 ) explore(*list->node_list++); } #endif #ifndef H_DFS #define H_DFS #include "graph.h" char **pre, **post; int explore(vertex *); int previsit(vertex *); int postvisit(vertex *); int dfs(graph *); int explore(vertex *node) { if (node->flag == 1) return; previsit(node); int i = 0; while (i++alength) { explore(*node->adjacency_nodes++); } postvisit(node); } int previsit(vertex *node) { *pre = (char *)malloc(sizeof(char)); *pre++ = node->data; } int postvisit(vertex *node) { *post = (char *)malloc(sizeof(char)); *post++ = node->data; node->flag = 1; } int dfs(graph *list) { int i = 0; while (i++length & (*list->node_list)->flag == 0 ) explore(*list->node_list++); } #endif queue.h [cpp] view plaincopyprint? #ifndef H_QUEUE #define H_QUEUE #includetypedef struct _nodes { vertex *data; struct _nodes *next; } node; typedef struct _queue { int length; node *front; node *end; } queue; int push(queue *, vertex *); int pop(queue *); int push(queue *q, vertex *v) { node *element; element = (node *)malloc(sizeof(node)); element->data = v; element->next = NULL; if (q->length == 0) { q->front = element; q->end = element; } else { node *temp; temp = q->front; while (temp->next != NULL) temp = temp->next; temp->next = element; q->end = element; } q->length++; } int pop(queue *q) { if (q->length == 0) return -1; node *temp; temp = q->front; q->front = q->front->next; q->length--; if (q->length == 1) q->end = NULL; free(temp); } #endif #ifndef H_QUEUE #define H_QUEUE #includetypedef struct _nodes { vertex *data; struct _nodes *next; } node; typedef struct _queue { int length; node *front; node *end; } queue; int push(queue *, vertex *); int pop(queue *); int push(queue *q, vertex *v) { node *element; element = (node *)malloc(sizeof(node)); element->data = v; element->next = NULL; if (q->length == 0) { q->front = element; q->end = element; } else { node *temp; temp = q->front; while (temp->next != NULL) temp = temp->next; temp->next = element; q->end = element; } q->length++; } int pop(queue *q) { if (q->length == 0) return -1; node *temp; temp = q->front; q->front = q->front->next; q->length--; if (q->length == 1) q->end = NULL; free(temp); } #endif bfs.h [cpp] view plaincopyprint? #ifndef H_BFS #define H_BFS #include "graph.h" #include "queue.h" #includeint bfs(graph *); int bfs(graph *g) { queue q; q.length = 0; push(&q, g->node_list[0]); int i; vertex *temp; temp = g->node_list[0]; while (q.length >0) { if (temp->alength >0) { for (i = 0; ialength; i++) push(&q, temp->adjacency_nodes[i]); temp = temp->adjacency_nodes[0]; } pop(&q); } } #endif

延伸阅读:

求编程领域上一些经典算法同时也是程序员必须掌握的算法这是我在一个论坛里看到的,你也参考参考吧。C++的虚函数====================== C++使用虚函数实现了其对象的多态,C++对象的开始四个字节是指向虚函数表的指针,其初始化顺序是...

C问题:查找算法:程序要求根据文件中给定的数据设定一个高效的你好,很高兴为你解答! 我觉得是查找一篇文章中某个单词数出现的次数,但是你题目的要求是查找字符串出现的次数,所以我还是按你的题意来写的 还有,我并不赞同楼上那些用C风格字符...

工伤赔偿的算法依据《劳动合同法》和《工伤保险条例》的有关规定,自伤害发生之日起一年内,收到伤害的劳动者可以向统筹地区的劳动行政保障部门申请工伤认定,然后再向劳动能力专业委员会申请劳...

Java通过几种经典的算法来实现数组排序JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡法、选择排序法、插入排序法。 快速排序法主要是运用了Arrays中的一个方法Arrays.sort()实现。 冒泡法是运用...

数据结构与算法 C语言描述怎么学啊现在苦逼死了上学期c#高级编程 (网站有pdf的)你只要读完前250页基本上就能应付考试所需了 数据结构 不就是 数据的集合 和在 集合上所能做的操作么 先把基本逻辑搞清楚了 比如 说 一个 栈 首先看...

没学过C语言可以学C语言数据结构与算法你好 一点小建议希望能对你有帮助 (1)学算法 学习算法和具体的语言还是有一定的联系,比如说你的算法最后要用c语言来实现,因为c是面向过程的,所以这和用面向对象的语言如c++来实...

数据结构与算法分析:C语言描述原书第2版这本书比起其额,我想你说的《数据结构与算法分析》应该是Weiss写的那本吧,那本书豆瓣给出了9分的评分,已经算是非常高的分数了,但计算机世界的经典著作犹如浩瀚的海洋,了不起的编程书籍还有很...

C语言数据结构与算法分析C语言描述Position不是一个类型,起码C语言中,我写那么多年代码没见过这个类型 。你该把整段代码贴上来。我猜你看的那段代码是伪代码,Position是自定义类型。若Position是类名,那么Positi...

什么叫算法什么叫计算机算法一、算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些比较或逻辑判断。如果一个算法有缺陷,或不适...

推荐阅读
图文推荐
栏目列表