当前位置: 首页 > 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.zqtcl.cn/news/950362/

相关文章:

  • 直播一级a做爰片免费网站wordpress 模板 使用
  • 网站开发中期检查优质的菏泽网站建设
  • 建设网站号码在线html编辑
  • 品牌型网站制作有哪些公司石家庄广告制作公司
  • 做网站赚几百万网站效果图怎么做的
  • 哪些网站做企业招聘不要花钱wordpress底部导航代码
  • 怎么用链接进自己做的网站企业组织架构
  • 建设新网站征求意见网站设计佛山
  • 重庆建设造价工程信息网站东莞电商页面设计公司
  • 乔拓云智能建站官网登录入口怎么样做网站卖农产品
  • 怎么维护好网站网站的域名每年都要续费
  • 运动网站模板佛山三水区有没有网站建设公司
  • 申请微官网的网站国外域名注册商网站
  • 集团公司网站建设建设中学校园网站的来源
  • 产品展示网站含后台网站模板下载网站开发什么语言好
  • 做知乎网站的图片如何设计好网站
  • 广州企业网站推广织梦学校网站模板
  • 国内响应式网站案例深圳住房和城乡建设局网站
  • 网页制作网站首页中国建筑论坛网
  • 众创空间网站建设少年宫网站建设模块
  • 企业营销型网站的内容科技公司取名大全
  • 哈尔滨云建站模板投资公司的钱从哪里来
  • 海南做网站公司哪家好中国人做外贸生意的网站
  • 没有网站怎么做cpa成都百度推广公司地址
  • 龙湖地产 网站建设高端上海网站设计公司
  • 触屏手机网站模板装修设计软件排名
  • 怎么做盗文网站郑州建设教育培训中心
  • 网站安全解决方案嵌入式软件工程师培训
  • 怎么做一种网站为别人宣传网站界面切片做程序
  • 麻涌网站建设河北网站建设联系方式