深度优先搜索 (DFS)
某无向图如下:
#include <stdio.h> // 邻接矩阵 typedef struct { char vexs[20]; // 顶点存储数据 int matrix[20][20]; // 邻接矩阵 int vexNum, arcNum; // 顶点数 弧数 } MatrixGraph; int visited[20]; // 是否被访问过 void DFS(MatrixGraph &graph, int i); void DFS_UG(MatrixGraph &graph); /**input: 7 8 abcdefg 3 5 4 3 5 4 0 2 1 0 0 6 6 4 0 5 */ int main() { MatrixGraph graph; // 图的顶点数和弧数 scanf("%d%d", &graph.vexNum, &graph.arcNum); getchar(); // 图的顶点所代表的数据 for(int i=0; i<graph.vexNum; i++) { scanf("%c", &graph.vexs[i]); } // 邻接矩阵初始化(置无限大) for(int i=0; i<graph.vexNum; i++) { for(int j=0; j<graph.vexNum; j++) { graph.matrix[i][j] = 0x7fffffff; } } for(int i=0; i<graph.arcNum; i++) { int a, b; scanf("%d%d", &a, &b); // 无向图 graph.matrix[a][b] = 1; graph.matrix[b][a] = 1; } DFS_UG(graph); } void DFS(MatrixGraph &graph, int i) { visited[i] = 1; printf("%c ", graph.vexs[i]); for(int j=0; j<graph.vexNum; j++) { if(graph.matrix[i][j]==1 && !visited[j]) { DFS(graph, j); } } } void DFS_UG(MatrixGraph &graph) { for(int i=0; i<graph.vexNum; i++) { visited[i] = 0; } printf("深度优先搜索结果:\n"); for(int i=0; i<graph.vexNum; i++) { if(!visited[i]) { DFS(graph, i); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了