图的广度遍历

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int visited[10];/*访问标志数组*/
typedef struct ArcCell{
 int adj;/*顶点关系类型,用1表示相邻,0表示不相邻*/
}ArcCell,**AdjMatrix;/*邻接矩阵*/
typedef struct type{ 
 char data[3];/*顶点值*/
 struct type *next;/*顶点的下一个指针*/
}VertexType;
typedef struct{
 VertexType *vexs;/*顶点向量*/
 AdjMatrix arcs;/*邻接矩阵*/
 int vexnum,arcnum;/*图的顶点数和边数*/
}MGraph;
/* ****************************** */
typedef struct QNode{
 int elem;
 struct QNode *next;
}QNode,*QueuePtr;/*队数据类型*/
typedef struct
{ QueuePtr front;/*队头指针*/
  QueuePtr rear;/*队尾指针*/
}LinkQueue;
int InitQueue(LinkQueue *Q)/*初始化队列*/
{ Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));/*分配空间*/
 if(!Q->front) exit(0);
 (Q->front)->next=NULL;
 return 1;
}
int EnQueue(LinkQueue *Q,int e)/*插在队最后*/
{QueuePtr p;
 p=(QueuePtr)malloc(sizeof(QNode));/*分配空间*/
 if(!p) exit(0);
 p->elem=e;p->next=NULL;
 (Q->rear)->next=p;
 Q->rear=p;/*重新设置队尾*/
 return 1;
}
int QueueEmpty(LinkQueue Q)/*队是否为空*/
{ if(Q.front==Q.rear) return 1;
 else return 0;}
int DelQueue(LinkQueue *Q,int *e)/*删除队的第一个元素*/
{QueuePtr p;
 if(QueueEmpty(*Q)) return 0;
 p=(Q->front)->next;
 *e=p->elem;
 (Q->front)->next=p->next;
 if(Q->rear==p) Q->rear=Q->front;
 free(p);
 return 1;
}
/* ************************ */
void InitGraph(MGraph *G)/*初始图*/
{ int i,nu,mu;
 printf("输入顶点的个数和(边)弧的个数:");
  scanf("%d%d",&nu,&mu);
  G->arcs=(ArcCell **)malloc(nu*sizeof(ArcCell *));
  for(i=0;i<nu;i++)/*分配邻接矩阵空间*/
      G->arcs[i]=(ArcCell *)malloc(nu*sizeof(ArcCell));
  G->vexs=(VertexType *)malloc(nu*sizeof(VertexType));/*分配顶点空间*/
  G->vexnum=nu;G->arcnum=mu;/*图的顶点数和边数*/
}
void InsertGraph(MGraph *G,int i,VertexType e)
{ if(i<0||i>G->vexnum) return;
  G->vexs[i].next=e.next;
  strcpy(G->vexs[i].data,e.data);

时间: 2024-09-30 00:36:47

图的广度遍历的相关文章

用java建立无向图,然后进行深度和广度遍历,下列的代码怎么改

问题描述 用java建立无向图,然后进行深度和广度遍历,下列的代码怎么改 import java.util.LinkedList;import java.util.Queue;class MatrixUDG { static int vlen; int elen; int[][] mMatrix; char[] mVexs; private int number = 7; private boolean[] flag; int[][] edges; MatrixUDG(char[] vexs c

矩阵图的深度广度遍历

图的常用表示方法就是矩阵和邻接表. 矩阵通常使用与规整的,且数据量较小的图,这种图直观上方便的表示出了图之间节点的相互关系. 图的数据结构 typedef struct Graph_Matrix{ char vers[NUM]; //存储数据表示 int arc[NUM][NUM];//二维矩阵图,用来表示节点相连情况 int numVer,numEdge;//顶点数,和边数 }Graph_Matrix; 矩阵图的深度优先遍历 为了防止图中有不连通的子图,因此每个节点顺序的遍历一次,每次采用深度

算法研究:图的广度优先遍历

图的遍历和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程 就叫做图的遍历(Traverse Graph). 图的遍历方法一般有两种,第一种是我们在前面讲过的<深度优先遍历 (Depth First Search)>,也有称为深度优先搜索,简称为DFS.第二种是广度优先遍历(Breadth  First Search), 也有称为广度优先搜索,简称为BFS.我们在<队列与广度优先搜索>中已经较为详细地讲述了广度优先搜索的策略,这里 不再

图的深度优先遍历:邻接表实现

这里用邻接表实现图的深度优先遍历,采用递归实现. #include<iostream> using namespace std; #define VERTEXNUM 5//结点数 struct edgenode { int to; int weight; // 边的权值 edgenode *next; }; struct vnode { int from; edgenode *first; }; void createGraph(vnode *adjilist, int start, int

算法研究:图的深度优先遍历

图的遍历和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程 就叫做图的遍历(Traverse Graph). 图的遍历方法一般有两种,第一种是深度优先遍历(Depth First Search),也 有称为深度优先搜索,简称为DFS.第二种是<广度优先遍历(Breadth  First Search)>,也有称为广度优先搜索, 简称为BFS.我们在<堆栈与深度优先搜索>中已经较为详细地讲述了深度优先搜索的策略,这里不再赘述.我们也可以把

图的深度优先遍历算法

前言 图的遍历与前面文章中的二叉树遍历还是存在很大区别的.所谓图的遍历指的是从图中的某一个顶点出发访问图中的其余顶点,并且需要保证每个顶点只被访问一次.由于图比二叉树复杂得多,所以前面二叉树的遍历算法在图中是行不通的.因为对于任意一个顶点来讲,都可能与其余的顶点发生连接.如果不对访问的顶点做一些处理,出发重复访问的几率是很高的.因此,一个基本思想是设置一个标记数组,主要用于标记已经被访问过的顶点.图的遍历算法主要有两种:深度优先遍历和广度优先遍历.本篇文章主要介绍的是深度优先遍历算法. 深度优先

图的广度优先遍历算法

前言 广度优先遍历算法是图的另一种基本遍历算法,其基本思想是尽最大程度辐射能够覆盖的节点,并对其进行访问.以迷宫为例,深度优先搜索更像是一个人在走迷宫,遇到没有走过就标记,遇到走过就退一步重新走:而广度优先搜索则可以想象成一组人一起朝不同的方向走迷宫,当出现新的未走过的路的时候,可以理解成一个人有分身术,继续从不同的方向走,,当相遇的时候则是合二为一(好吧,有点扯了). 广度优先遍历算法的遍历过程 仍然以上一篇图的深度优先遍历算法的例子进行说明,下面是广度优先遍历的具体过程: 从起点0开始遍历

算法-有关图的深度优先遍历问题的学习

问题描述 有关图的深度优先遍历问题的学习 请问,如何学习掌握深搜算法,求推荐例题,经典题目,为了参加ACM 解决方案 http://blog.csdn.net/u014271612/article/details/47705289 可以看一下思想! 解决方案二: 图的深度优先遍历图的深度优先遍历图深度优先遍历 解决方案三: www.codevs.cn 题库->搜索->深度优先搜索

求一个数据结构代码 要有注释 关于图的深度遍历的 要求必修用C语言做出

问题描述 求一个数据结构代码 要有注释 关于图的深度遍历的 要求必修用C语言做出 要求用数据结构 代码后面要有注释 底下的要求一个也不能漏 图的DFS遍历 要求: 1) 先任意创建一个图: 2) 图的DFS的递归和非递归算法的实现 3) 要求用邻接矩阵.邻接表两种结构存储实现 解决方案 http://zhidao.baidu.com/link?url=54LjtF_eA5Ppp2_FHcYL6q32Zhv1-gTcjAcHmXrHyddryApBeq-meV8z40RuGPEfqMxSGGKE6