当前位置: 首页 > news >正文

网站排名推广怎么做四川省建设网站建筑电工

网站排名推广怎么做,四川省建设网站建筑电工,网站建设免费视屏教程,摄影设计思路文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索#xff08;BFS#xff09;是一种广泛应用于图论中的算法#xff0c;常用于寻找最短路径、图的遍历等问题。与深度优先搜索#xff08;DFS… 文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索BFS是一种广泛应用于图论中的算法常用于寻找最短路径、图的遍历等问题。与深度优先搜索DFS不同BFS通过层级地探索节点来确保最先访问的节点距离源点较近因此它可以用来求解最短路径问题。让我们深入了解这个算法并通过具体的例子和代码来进一步掌握它的实现。 一、BFS的思路 BFS的主要思想是从起始节点开始首先访问该节点的所有邻接节点然后再访问这些邻接节点的邻接节点。BFS利用队列的先进先出FIFO特性保证了节点是按层次顺序被访问的。 二、BFS的C语言实现 1. 图的表示 在C语言中我们常用邻接表来表示图。对于无向图我们可以使用一个邻接矩阵或者邻接链表。在这里我们采用邻接链表表示图。 2. BFS的实现 以下是C语言实现BFS算法的具体代码图使用邻接表表示 #include stdio.h #include stdlib.h #include stdbool.h#define MAX_NODES 6 // 节点数量// 图的邻接表结构 typedef struct Node {int data;struct Node* next; } Node;typedef struct Graph {Node* adjList[MAX_NODES]; } Graph;// 队列结构 typedef struct Queue {int items[MAX_NODES];int front, rear; } Queue;// 创建一个新的图 Graph* createGraph() {Graph* graph (Graph*)malloc(sizeof(Graph));for (int i 0; i MAX_NODES; i) {graph-adjList[i] NULL;}return graph; }// 向图中添加一条边 void addEdge(Graph* graph, int src, int dest) {Node* newNode (Node*)malloc(sizeof(Node));newNode-data dest;newNode-next graph-adjList[src];graph-adjList[src] newNode;// 因为是无向图所以添加反向边newNode (Node*)malloc(sizeof(Node));newNode-data src;newNode-next graph-adjList[dest];graph-adjList[dest] newNode; }// 初始化队列 void initQueue(Queue* q) {q-front -1;q-rear -1; }// 入队 void enqueue(Queue* q, int value) {if (q-rear MAX_NODES - 1) {printf(队列已满\n);return;}if (q-front -1) {q-front 0;}q-rear;q-items[q-rear] value; }// 出队 int dequeue(Queue* q) {if (q-front -1) {printf(队列为空\n);return -1;}int item q-items[q-front];q-front;if (q-front q-rear) {q-front q-rear -1;}return item; }// 判断队列是否为空 bool isQueueEmpty(Queue* q) {return q-front -1; }// 广度优先搜索BFS void bfs(Graph* graph, int start) {bool visited[MAX_NODES] {false}; // 访问标志数组Queue q;initQueue(q);// 标记起始节点为已访问并入队visited[start] true;enqueue(q, start);while (!isQueueEmpty(q)) {// 出队并访问节点int node dequeue(q);printf(%c , node A); // 输出节点假设节点是字母A, B, C...// 遍历当前节点的所有邻接节点Node* temp graph-adjList[node];while (temp) {int adjNode temp-data;if (!visited[adjNode]) {visited[adjNode] true;enqueue(q, adjNode);}temp temp-next;}} }int main() {// 创建图并添加边Graph* graph createGraph();addEdge(graph, 0, 1); // A - BaddEdge(graph, 0, 2); // A - CaddEdge(graph, 1, 3); // B - DaddEdge(graph, 1, 4); // B - EaddEdge(graph, 2, 4); // C - EaddEdge(graph, 3, 5); // D - FaddEdge(graph, 4, 5); // E - F// 执行BFS从节点A索引0开始printf(BFS遍历结果: );bfs(graph, 0);// 释放内存free(graph);return 0; } 三、代码解析 图的表示 图使用邻接表表示。每个节点用一个链表来存储与其直接相连的节点。Graph结构体中有一个数组 adjList 来保存所有节点的邻接链表。 队列的实现 队列用数组来实现包含 front 和 rear 来管理队列的操作。队列用于按顺序访问图的每个节点。 BFS的实现 使用队列来管理待访问的节点。首先将起始节点标记为已访问并入队。然后逐步出队并访问节点访问节点的邻接节点如果邻接节点未被访问则将其标记为已访问并入队。输出遍历的节点假设节点为字母如 A, B, C, …。 四、输出结果 假设图的结构如下所示 A -- B -- D| | |C -- E -- F 输出结果将为 BFS遍历结果: A B C D E F 这意味着从节点 A 开始BFS按层次遍历的顺序访问了图中的所有节点。 五、总结 BFS是一种通过逐层扩展来遍历图的算法通常用于求解最短路径问题、图的遍历等。在C语言中BFS通常使用队列来实现队列的先进先出特性确保了图的层次遍历。本例中通过邻接表表示图使用队列来实现BFS遍历从而找到节点间的最短路径。广度优先搜索在实际问题中具有广泛的应用例如在社交网络分析、路径规划等方面都可以发挥其强大的作用。 本篇关于BFS算法篇的介绍就暂告段落啦希望能对大家的学习产生帮助欢迎各位佬前来支持斧正
http://www.pierceye.com/news/950362/

相关文章:

  • 没有服务器建网站免费开发软件制作平台
  • 高端品牌网站建设明细报价报青岛市公共资源交易网
  • 余姚 网站建设济南网站开发薪酬
  • 一流高职院校建设工作网站野花香社区在线观看播放
  • 大连建设科技网站绿色主题 wordpress
  • 外网访问不了内网建设的网站做网站电销
  • 桂平市住房和城乡建设局网站杭州app定制公司
  • 免费做金融网站自己做网站想更换网址
  • 浙江省网站建设公司成都五月花网页设计培训
  • 江苏外贸网站建设网站开发工作流审批流
  • 自媒体论坛交流推荐网站外部优化
  • 南宁网络建站直接用源码做网站盗版吗
  • 哪些网站可以做驾考试题旅游网站排名排行榜
  • 网站宣传专利被罚账户竞价托管费用
  • 芙蓉区网站建设qq建设网站首页
  • 做音乐网站怎么放音乐常州网红打卡景点
  • 网站做的题不小心关闭了如何成为室内设计师
  • 营销型网站建设公司地址外贸网站seo优化
  • 建设网站是什么科目wordpress对接易支付宝
  • wordpress英文意思能做SEO优化的网站建设
  • 海沧建设网站多少一站式服务英文
  • wordpress网站需要多大空间建设营销型网站
  • id97网站怎么做的项目营销策划方案
  • 站群网站怎么做缓存
  • 网站(网店)建设方案范文北京网站搭建服务
  • 建设银行网站怎么设置转账额度百度竞价培训班
  • 八大员继续教育入口做优化网站注意什么
  • 网络空间服务商宁波seo网络推广推荐公众号
  • 网站登录注册做验证码的目地汕头网站建设浩森宇特
  • 做鼻翼整形整形的网站开原网站开发