博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图的遍历
阅读量:4331 次
发布时间:2019-06-06

本文共 3159 字,大约阅读时间需要 10 分钟。

  • 邻接矩阵的DFS

    const int MAXN = 100;bool visited[MAXN];struct MGraph{  int vexs[MAXN];//顶点表  int arc[MAXN][MAXN];//邻接矩阵  int numEdges, numVertexes;//边,点的数量};void DFS(MGraph *G,int i){  int j;  visited[i] = 1;  cout << G->vexs << ' ';//输出节点信息也可以进行其他操作  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] = 0;  for (i = 0; i < G->numVertexes; i++)      if (!visited[i])//未访问过的顶点调用DFS,若是连通图,则只执行一次          DFS(G, i);}
  • 邻接表的DFS

    const int MAXN = 100;bool visited[MAXN];struct EdgeNode{  int adjvex;  EdgeNode *next;};struct VexNode{  int data;  EdgeNode *firstedge;};struct Grapha{  VexNode list[MAXN];  int numVertexes, numEdges;};void DFS(Grapha *G, int i){  EdgeNode *p;  visited[i] = 1;  cout << G->list[i].data << ' ';//输出节点信息,也可以进行其他操作  p = G->list[i].firstedge;  while (p)  {      if (!visited[p->adjvex])          DFS(G, p->adjvex);      p = p->next;  }}void DFSTraverse(Grapha *G){  for (int i = 0; i < G->numVertexes; i++)//初始化      visited[i] = 0;  for (int i = 0; i < G->numVertexes; i++)//若为连通图,只执行一次      if (!visited[i])          DFS(G, i);}
  • 邻接矩阵的BFS

    const int MAXN = 1000;int visited[MAXN];struct MGraph{  int vexs[MAXN];//顶点表  int arc[MAXN][MAXN];//邻接矩阵  int numEdges, numVertexes;//边,点的数量};void BFSTraverse(MGraph G){  int i, j;  queue
    Q; for (int i = 0; i < G.numVertexes; i++) visited[i] = 0; for (int i = 0; i < G.numVertexes; i++) { if (!visited[i]) { visited[i] = 1; cout << G.vexs[i] << ' '; Q.push(i); while (!Q.empty()) { int t = Q.front(); Q.pop(); for (int j = 0; j < G.numVertexes; j++) { if (G.arc[t][j] == 1 && !visited[j]) { visited[j] = 1; cout << G.vexs[j] << ' '; Q.push(j); } } } } }}
  • 邻接表的BFS

    const int MAXN = 1000;int visited[MAXN];struct EdgeNode           //边表节点{  int adjvex;//邻接点域(有向图中弧头下标)  EdgeNode *next;//指向下一个边表};struct VertexNode     //顶点表节点{  char data;//顶点域  EdgeNode *firstedge;//边表头指针};struct GraphAdjList//图{  VertexNode adjList[MAXN];//顶点表数组  int numVertexea, numEdges;//图中顶点数和边数};void BFSTraverse(GraphAdjList G){  queue
    Q; for (int i = 0; i < G.numVertexea; i++) visited[i] = 0; for (int i = 0; i < G.numVertexea; i++) { if (!visited[i]) { visited[i] = 1; cout << G.adjList[i].data << ' '; Q.push(i); while (!Q.empty()) { int t = Q.front(); Q.pop(); EdgeNode *p = G.adjList[t].firstedge; while (p) { if (!visited[p->adjvex]) { visited[p->adjvex] = 1; cout << G.adjList[p->adjvex].data << ' '; Q.push(p->adjvex); } p = p->next; } } } }}

转载于:https://www.cnblogs.com/JMWan233/p/11463478.html

你可能感兴趣的文章
优雅的程序员
查看>>
oracle之三 自动任务调度
查看>>
Android dex分包方案
查看>>
ThreadLocal为什么要用WeakReference
查看>>
删除本地文件
查看>>
FOC实现概述
查看>>
base64编码的图片字节流存入html页面中的显示
查看>>
这个大学时代的博客不在维护了,请移步到我的新博客
查看>>
GUI学习之二十一——QSlider、QScroll、QDial学习总结
查看>>
nginx反向代理docker registry报”blob upload unknown"解决办法
查看>>
gethostbyname与sockaddr_in的完美组合
查看>>
kibana的query string syntax 笔记
查看>>
旋转变换(一)旋转矩阵
查看>>
thinkphp3.2.3 bug集锦
查看>>
[BZOJ 4010] 菜肴制作
查看>>
C# 创建 读取 更新 XML文件
查看>>
KD树
查看>>
VsVim - Shortcut Key (快捷键)
查看>>
C++练习 | 模板与泛式编程练习(1)
查看>>
HDU5447 Good Numbers
查看>>