数据结构(10)

邻接矩阵表示法

1、主要特点:
一个图的邻接矩阵表示是唯一的。
特别适合于稠密图的存储。
存储空间为O(n^2)。

#define MAXV<最大顶点个数>
typedef struct{
int no;//顶点编号
InfoType info;//顶点其他信息
}VertexType;
typedef struct{
int edges[MAXV][MAXV];//邻接矩阵
int n,e;//顶点数,边数
VertexType vexs[MAXV];//存放顶点信息
}MGraph;

邻接表存储方法

对图中每个顶点i建立一个单链表,将顶点i所有邻接点链起来。
每个单链表上添加一个表头节点(表示顶点信息)。并将所有表头节点构成一个数组,下标为i的元素表示顶点i 的表头结点。

typedef struct ANode
{ int adjvex;//该边的终点编号
struct ANode *nextarc;//指向下一条边的指针
InfoType info;//该边的权值等信息
}ArcNode;
typedef struct Vnode
{ Vertex data;//顶点信息
ArcNode *firstarc;//指向第一条边
}VNode;
typedef struct
{VNode adjlist[MAXV];//邻接表
int n,e;//图中顶点数n和边数e
}ALGraph;

图的遍历

void DFS(ALGraph *G,int v)
{ArcNode *p,int w;
visited[v]=1;//置已访问标记
printf("%d ",v);//输出被访问顶点的编号
p=G->adjlist[v].firstarc;//p指向顶点v的第一条边的边头节点
while(p!=NULL)
{
w=p->adjvex;
if(visited[w]==0)
DFS(G,w);//若w顶点未访问,递归访问它
p=p->nextarc;//p指向顶点v的下一条边的边头节点

广度优先遍历算法

采用邻接表的BFS算法

void BFS(ALGraph *G,int v)
{ArcNode *p;int w,i;
int queue[MAXV],front=0,rear=0;//定义循环队列
int visited[MAXV];
for(i=0;i<G->n;i++)
visited[i]=0;//访问标志数组初始化
printf("%2d",v);//输出被访问顶点的编号
visited[v]=1;
while(front!=rear)
{front=(front+1)%MAXV;
w=queue[front];//出队并赋给w
p=G->adjlist[w].firstarc;//找w的第一个邻接点
while(p!=NULL)
{
if(visited[p->adjvex]==0)
{
printf("%2d",p->adjvex);
visited[p->adjvex]=1;
rear=(rear+1)%MAXV;//相邻顶点进队
queue[rear]=p->adjvex;)
p=p->nextarc;//找下一个邻接顶点
}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值