数据结构--图的遍历(深度优先遍历)

更新时间:2023-07-23 23:58:47 阅读: 评论:0

数据结构--图的遍历(深度优先遍历)
数据结构–图的遍历(深度优先遍历)
深度优先遍历是从图中某个顶点出发,访问此顶点,然后从它未被访问到的邻接点出发深度优先遍历图,直到图中所有和它有路径相通的顶点都被访问到.
邻接矩阵:
#include <stdio.h>
#define MAXVEX 20          //最⼤顶点数
#define FINITY 100          //代表    ∞
typedef char VertexType;    //顶点类型
int visit[MAXVEX];          标志数组
//邻接矩阵存储结构
typedef struct{
VertexType vexs[MAXVEX];    //顶点数组
int arc[MAXVEX][MAXVEX];    //边的权值
int numVertexes,numEdges;  //实际顶点数和边数
}MGraph;
//创建邻接矩阵
void Create(MGraph *G){
int i,j;
printf("输⼊顶点数和边数:\n");
scanf("%d%d",&G->numVertexes,&G->numEdges);
//输⼊顶点信息,创建顶点表
printf("输⼊顶点信息:\n");
for(i=0;i<G->numVertexes;i++){
getchar();
scanf("%c",&G->vexs[i]);
}
//输⼊邻接矩阵
printf("输⼊邻接矩阵:\n");
for(i=0;i<G->numVertexes;i++){
for(j=0;j<G->numVertexes;j++){
scanf("%d",&G->arc[i][j]);
if(G->arc[i][j]==0)
G->arc[i][j]=FINITY;
}
}
//输出邻接矩阵
printf("邻接矩阵为:\n");
for(i=0;i<G->numVertexes;i++){
for(j=0;j<G->numVertexes;j++)
printf("%3d ",G->arc[i][j]);
printf("\n");
}
}
//邻接矩阵的深度遍历操作
韶华怎么读
void DFSTraver(MGraph G){
int i;
for(i=0;i<G.numVertexes;i++)
visit[i]=0;
for(i=0;i<G.numVertexes;i++)
运⾏结果: 邻接表:
wifi display
for (i=0;i<G.numVertexes;i++)
if (visit[i]==0)
DFS(G,i);
barked
}
//邻接矩阵的深度优先递归算法
void  DFS(MGraph G,int  i){
int  j;
visit[i]=1;
printf("%c ",G.vexs[i]);
for (j=0;j<G.numVertexes;j++)
if (G.arc[i][j]!=FINITY&&visit[j]==0)
DFS(G,j);
}
int  main(){
MGraph  G;
Create(&G);
DFSTraver(G);}
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 20
typedef  char  VertexType;
int  visit[MAXVEX];
//边表结点
typedef  struct  EdgeNode{
int  adjvex;
struct  EdgeNode *next;
}EdgeNode;
//顶点表结点
typedef  struct  VertexNode{
VertexType data;
EdgeNode *firstedge;
dean
EdgeNode *firstedge;
广州成人高考学校}VertexNode,AdjList[MAXVEX];
typedef struct{
AdjList adjlist;
int numVertexes,numEdges;
}GraphAdjList;
//创建邻接表
void Create(GraphAdjList *G){
int i,j,k;
EdgeNode *p;
printf("输⼊顶点数和边数:\n");
scanf("%d%d",&G->numVertexes,&G->numEdges);
/
/输⼊顶点信息
printf("输⼊顶点信息:\n");
for(i=0;i<G->numVertexes;i++){
getchar();
scanf("%c",&G->adjlist[i].data);
G->adjlist[i].firstedge=NULL;          //将指向边表的指针初始化    }
//建⽴边表
printf("输⼊边(Vi,Vj)中的下标i,j:\n");
for(k=0;k<G->numEdges;k++){
scanf("%d%d",&i,&j);
p=(EdgeNode *)malloc(sizeof(EdgeNode));
2017年4月29日
p->adjvex=j;                                //存储弧头
p->next=G->adjlist[i].firstedge;            //头插法插⼊边结点
G->adjlist[i].firstedge=p;
//下⾯代码有向图⽆,⽆向图有
among的用法
p=(EdgeNode *)malloc(sizeof(EdgeNode));
p->adjvex=i;                                //存储弧头
p->next=G->adjlist[j].firstedge;            //头插法插⼊边结点
G->adjlist[j].firstedge=p;
}
//打印邻接表
printf("邻接表为:\n");
for(i=0;i<G->numVertexes;i++){
p=G->adjlist[i].firstedge;
while(p){
natural是什么意思
printf("(%c,%c)",G->adjlist[i].data,G->adjlist[p->adjvex].data);            p=p->next;
}
printf("\n");
}
}
//邻接表深度遍历操作
void DFSTraver(GraphAdjList G){
int i;
for(i=0;i<G.numVertexes;i++)
visit[i]=0;
for(i=0;i<G.numVertexes;i++)
if(visit[i]==0)
DFS(G,i);
}
//邻接表深度优先递归算法
void DFS(GraphAdjList G,int i){
winter is coming
EdgeNode *p;
EdgeNode *p;
visit[i]=1;
printf("%c ",G.adjlist[i].data);
p=G.adjlist[i].firstedge;
while(p){
if(visit[p->adjvex]==0)
DFS(G,p->adjvex);
p=p->next;
}
}
int main(){
GraphAdjList G;英汉汉英词典
Create(&G);
DFSTraver(G);
}
运⾏结果:

本文发布于:2023-07-23 23:58:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1113553.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:顶点   遍历   深度   优先   邻接   信息
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图