首页 > 其他分享 >12月25日总结

12月25日总结

时间:2025-01-10 19:24:44浏览次数:1  
标签:总结 25 12 temp int graph AdjListNode dest Graph

今日主要学习了图的两种遍历方法:深度优先遍历和广度优先遍历
深度优先搜索(DFS)

include <stdio.h>

include <stdlib.h>

define MAX_VERTICES 100

// 图的结构体,使用邻接表存储
typedef struct Graph {
int numVertices;
struct AdjListNode** adjLists;
int* visited;
} Graph;

// 邻接表节点结构体
typedef struct AdjListNode {
int dest;
struct AdjListNode* next;
} AdjListNode;

// 创建邻接表节点
AdjListNode* createAdjListNode(int dest) {
AdjListNode* newNode = (AdjListNode*)malloc(sizeof(AdjListNode));
newNode->dest = dest;
newNode->next = NULL;
return newNode;
}

// 创建图
Graph* createGraph(int numVertices) {
Graph* graph = (Graph)malloc(sizeof(Graph));
graph->numVertices = numVertices;
graph->adjLists = (AdjListNode**)malloc(numVertices * sizeof(AdjListNode
));
graph->visited = (int*)malloc(numVertices * sizeof(int));
for (int i = 0; i < numVertices; i++) {
graph->adjLists[i] = NULL;
graph->visited[i] = 0;
}
return graph;
}

// 添加边
void addEdge(Graph* graph, int src, int dest) {
AdjListNode* newNode = createAdjListNode(dest);
newNode->next = graph->adjLists[src];
graph->adjLists[src] = newNode;

// 对于无向图,添加反向边
newNode = createAdjListNode(src);
newNode->next = graph->adjLists[dest];
graph->adjLists[dest] = newNode;

}

// 深度优先搜索辅助函数
void DFSUtil(Graph* graph, int vertex) {
graph->visited[vertex] = 1;
printf("%d ", vertex);

AdjListNode* temp = graph->adjLists[vertex];
while (temp!= NULL) {
    if (!graph->visited[temp->dest]) {
        DFSUtil(graph, temp->dest);
    }
    temp = temp->next;
}

}

// 深度优先搜索
void DFS(Graph* graph, int startVertex) {
DFSUtil(graph, startVertex);
}

广度优先搜索(BFS)

include <stdio.h>

include <stdlib.h>

include

// 广度优先搜索
void BFS(Graph* graph, int startVertex) {
int* visited = (int*)malloc(graph->numVertices * sizeof(int));
for (int i = 0; i < graph->numVertices; i++) {
visited[i] = 0;
}

std::queue<int> queue;
visited[startVertex] = 1;
queue.push(startVertex);

while (!queue.empty()) {
    int currentVertex = queue.front();
    queue.pop();
    printf("%d ", currentVertex);

    AdjListNode* temp = graph->adjLists[currentVertex];
    while (temp!= NULL) {
        if (!visited[temp->dest]) {
            visited[temp->dest] = 1;
            queue.push(temp->dest);
        }
        temp = temp->next;
    }
}

}

标签:总结,25,12,temp,int,graph,AdjListNode,dest,Graph
From: https://www.cnblogs.com/Genghao11/p/18664550

相关文章

  • 12月26日总结
    今日主要学习了图中寻找最短路径的算法:迪杰斯特拉算法和弗洛伊德算法迪杰斯特拉算法:include<stdio.h>include<stdlib.h>include<limits.h>include<stdbool.h>//找到未确定最短路径的顶点中距离源点最近的顶点intminDistance(intdist[],boolsptSet[],intnumVerti......
  • 12月17日每日总结
    今日主要学习了图中寻找最小生成树的算法:克鲁斯卡尔算法和普利姆算法克鲁斯卡尔算法:构建边结构体:用于存储图中的边信息,包括边的两个端点以及边的权值。typedefstructEdge{intsrc;intdest;intweight;}Edge;对边进行排序:可以使用C语言标准库中的qsort函数来实现......
  • 超声波眼镜清洗机哪个牌子好?2025年精选十大声波清洗机品牌推荐
    随着消费者对眼镜护理和视觉健康的关注度不断提升,选择一款高效、精准且易于操作的眼镜清洗机成为了大家的共同需求。不仅是因为不干净的镜片影响了眼镜的美观,更因为污渍和油渍堆积会导致镜片不清晰,进而影响视力的清晰度和舒适度。本文将为大家介绍2025年最受欢迎的十款超声波眼......
  • java献血系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在现代社会,无偿献血对于保障医疗用血安全和满足医疗需求具有不可替代的重要性。随着社会的发展和人口的增长,医疗用血的需求量持续增加,对献血管理......
  • java米哈游原神角色伤害计算系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景《原神》作为一款在全球范围内广受欢迎的开放世界冒险RPG游戏,其复杂而多样的角色伤害计算系统是游戏核心机制之一。随着游戏的不断更新与发展,角......
  • vscode配latex,用于latex排版,花了几个小时终于研究明白了(已总结)
    掉坑里了,切记texlive必须要安装,不然就是下面这样子步骤一:texlive安装链接:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/下载完后双击ISO文件,再双击install-tl-windows.bat双击install-tl-windows.bat之后会自动跳转1-2个页面到下面这个页面......
  • 12月25日
    泛型的类型参数泛型的类型参数可以是任何有效的Java类型,但不能是基本数据类型。可以使用类、接口或自定义类型作为类型参数。类型参数的限制可以使用extends关键字对类型参数进行限制,表示类型参数必须是某个类的子类或实现某个接口的类。例如:javapublicclassBox{private......
  • 12月20日总结
    今日学习了队列的相关操作:定义:defineMAX_SIZE100//假设队列最大容量为100typedefstructQueue{intdata[MAX_SIZE];intfront;intrear;}Queue;初始化:voidinitQueue(Queue*q){q->front=0;q->rear=0;}入队操作:voidenqueue(Queue*q,intvalue){i......
  • 2024-12-1-#{}与¥{}的区别-response
    {}与¥{}的区别response实现重定向response响应字符数据response响应字节数据以及导入工具类实现响应......
  • 12月14日总结
    今日学习了,单链表的基本操作:定义:typedefstructListNode{intdata;structListNode*next;}ListNode;初始化:voidinsertAtHead(ListNode**head,intvalue){ListNode*newNode=(ListNode*)malloc(sizeof(ListNode));newNode->data=value;......