邻接矩阵DFS遍历(递归以及非递归)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include <iostream> #include <stack> #include <queue> #include <cstdio> #define MAXVEX 100 #define TRUE 1 #define FALSE 0 #define MAX 100 #define INFINITY 65535 using namespace std; typedef char VertexType; typedef int EdgeType; bool visited[MAX]; typedef struct { VertexType vexs[MAXVEX]; EdgeType arc[MAXVEX][MAXVEX]; int numVertexes, numEdges; }MGraph; void CreateMGraph(MGraph *G){ int i, j, k, w; printf ( "input num_vertexes and num_edges:\n" ); scanf ( "%d %d" , &G->numVertexes, &G->numEdges); getchar (); printf ( "input vertexes_name:\n" ); for (i=0; i<G->numVertexes;i++){ //输入结点 scanf ( "%c" , &G->vexs[i]); getchar (); } for (i=0;i<G->numVertexes;i++) for (j=0;j<G->numVertexes;j++) G->arc[i][j]=INFINITY; printf ( "input edges(vi,vj) i,j and w:\n" ); for (k=0;k<G->numVertexes;k++){ scanf ( "%d %d %d" ,&i,&j,&w); G->arc[i][j]=w; G->arc[j][i]=G->arc[i][j]; } } void DFS(MGraph G, int i ){ int j; visited[i]=TRUE; printf ( "%c " , G.vexs[i]); for (j=0;j<G.numVertexes;j++){ if (G.arc[i][j]==1&&!visited[j]) DFS(G, j); } } void DFSTraverse(MGraph G){ int i; for (i=0;i<G.numVertexes;i++) visited[i] = FALSE; for (i=0;i<G.numVertexes;i++) if (!visited[i]) DFS(G, i); } int main(){ MGraph G; CreateMGraph(&G); DFS(G, 0); printf ( "\n" ); DFSTraverse(G); return 0; } /* 5 4 A B C D E 0 1 1 0 4 1 1 2 1 4 2 1 2 3 1 */ |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用