问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求c语言图的深度优先遍历算法

发布网友 发布时间:2022-04-24 07:55

我来回答

3个回答

热心网友 时间:2022-06-17 19:54

#define MaxVerNum 100 /* 最大顶点数为*/
typedef enum {False,True} boolean;
#include "stdio.h"
#include "stdlib.h"
boolean visited[MaxVerNum];

typedef struct node /* 表结点*/
{
int adjvex;/* 邻接点域,一般是放顶点对应的序号或在表头向量中的下标*/
char Info; /*与边(或弧)相关的信息*/
struct node * next; /* 指向下一个邻接点的指针域*/
} EdgeNode;
typedef struct vnode /* 顶点结点*/
{
char vertex; /* 顶点域*/
EdgeNode * firstedge; /* 边表头指针*/
} VertexNode;
typedef struct
{
VertexNode adjlist[MaxVerNum]; /* 邻接表*/
int n,e; /* 顶点数和边数*/
} ALGraph; /* ALGraph是以邻接表方式存储的图类型*/

//建立一个无向图的邻接表存储的算法如下:
void CreateALGraph(ALGraph *G)/* 建立有向图的邻接表存储*/
{
int i,j,k;
int N,E;
EdgeNode *p;
printf("请输入顶点数和边数:");
scanf("%d %d",&G->n,&G->e);
printf("n=%d,e=%d\n\n",G->n,G->e);
getchar();
for(i=0;i<G->n;i++) /* 建立有n个顶点的顶点表*/
{
printf("请输入第%d个顶点字符信息(共%d个):",i+1,G->n);
scanf("%c",&(G->adjlist[i].vertex)); /* 读入顶点信息*/
getchar();
G->adjlist[i].firstedge=NULL; /* 顶点的边表头指针设为空*/
}
for(k=0;k<2*G->e;k++) /* 建立边表*/
{
printf("请输入边<Vi,Vj>对应的顶点序号(共%d个):",2*G->e);
scanf("%d %d",&i,&j);/* 读入边<Vi,Vj>的顶点对应序号*/
p=(EdgeNode *)malloc(sizeof(EdgeNode)); // 生成新边表结点p
p->adjvex=j; /* 邻接点序号为j */
p->next=G->adjlist[i].firstedge;/* 将结点p插入到顶点Vi的链表头部*/
G->adjlist[i].firstedge=p;
}
printf("\n图已成功创建!对应的邻接表如下:\n");
for(i=0;i<G->n;i++)
{
p=G->adjlist[i].firstedge;
printf("%c->",G->adjlist[i].vertex);
while(p!=NULL)
{
printf("[ %c ]",G->adjlist[p->adjvex].vertex);
p=p->next;
}
printf("\n");
}
printf("\n");
} /*CreateALGraph*/

int FirstAdjVertex(ALGraph *g,int v)//找图g中与顶点v相邻的第一个顶点
{
if(g->adjlist[v].firstedge!=NULL) return (g->adjlist[v].firstedge)->adjvex;
else return 0;
}

int NextAdjVertex(ALGraph *g ,int vi,int vj )//找图g中与vi相邻的,相对相邻顶点vj的下一个相邻顶点
{
EdgeNode *p;
p=g->adjlist[vi].firstedge;
while( p!=NULL && p->adjvex!=vj) p=p->next;
if(p!=NULL && p->next!=NULL) return p->next->adjvex;
else return 0;
}
void DFS(ALGraph *G,int v) /* 从第v个顶点出发深度优先遍历图G */
{
int w;
printf("%c ",G->adjlist[v].vertex);
visited[v]=True; /* 访问第v个顶点,并把访问标志置True */
for(w=FirstAdjVertex(G,v);w;w=NextAdjVertex(G,v,w))
if (!visited[w]) DFS(G,w);/* 对v尚未访问的邻接顶点w递归调用DFS */
}

void DFStraverse(ALGraph *G)
/*深度优先遍历以邻接表表示的图G,而以邻接矩阵表示时,算法完全相同*/
{ int i,v;
for(v=0;v<G->n;v++)
visited[v]=False;/*标志向量初始化*/
//for(i=0;i<G->n;i++)
if(!visited[0]) DFS(G,0);
}/*DFS*/

void main()
{
ALGraph G;
CreateALGraph(&G);
printf("该无向图的深度优先搜索序列为:");
DFStraverse(&G);
printf("\nSuccess!\n");
}

热心网友 时间:2022-06-17 19:54

//两个算法使用的全局变量 ---
bool visited[MAX_VERTEX_NUM]; // 访问标志数组
Status (* VisitFunc)(int v); // 函数变量
void DFSTraverse(Graph G, Status (*Visit)(int v)) {
// 对图G作深度优先遍历。
int v;
VisitFunc = Visit; // 使用全局变量VisitFunc,使DFS不必设函数指针参数
for (v=0; v<G.vexnum; ++v) visited[v] = false; // 访问标志数组初始化
for (v=0; v<G.vexnum; ++v)
if (!visited[v]) DFS(G, v); // 对尚未访问的顶点调用DFS
}
void DFS(Graph G, int v) {
// 从第v个顶点出发递归地深度优先遍历图G。
int w;
visited[v] = true; VisitFunc(v); // 访问第v个顶点
for (w=FirstAdjVex(G, v); w!=-1; w=NextAdjVex(G, v, w))
if (!visited[w]) // 对v的尚未访问的邻接顶点w递归调用DFS
DFS(G, w);
}

热心网友 时间:2022-06-17 19:55

int visited[n]
Graph g;
DFS(i)
int i;
{
int j;
printf("node:%c\n",g.vexs[i]);
visited[i]=true;
for(j=0;j<n;j++)
if((g.arcs[i][j]==1)&&(!visited[j]))
DFS(j);}
vexnode g1[n]
DFSL(i)
int i;
{
int j;
edgenode *p;
printf("node:%c\n",g1[i].vertex);
visited[i]=true;
p=g1[i].link;
while(p!=NULL)
{
if(!visited[p->adjvex])
DFSL(p->adjvex);
p=p->next;}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 湖北省荆州市公安县天气预报 图的图的遍历 2月7日 太原及周边高速公路路况信息 荆门周边有哪里风景好点的,好玩点的 图采用邻接矩阵和邻接链表表示时,深度优先遍历算法的时间复杂度有何不同? 细菌在环境保护中的作用 图遍历的算法 细菌生长的环境因素 什么是图的深度优先遍历?什么是图的广度优先遍历? 考研选学校,应该求稳还是坚持自己的理想院校? 细菌生长环境影响因素 硫细菌、硝化细菌、铁细菌、氢细菌对农业生产和环境有哪些影响? 用邻接表表示图进行深度优先遍历时,通常采用()来实现算法 我与工作单位只签了劳动合同,其他材料全在自己手里,工作未满一年,现在打算辞职,除了辞职报告还需要什 细菌与环境保护 采用邻接表存储的图的深度优先遍历算法类似于二叉树的先序遍历,为什么是先序呢? 暴雨冰雹雷电来袭,湖北连发100多条预警,哪些地区受灾严重? 细菌对环境的坏处,举例子,多点 湖北京山空明山洞的天气预报? 细菌的好处与坏处 滥用抗生素导致超级细菌开始横行,对环境将有哪些影响? 2月18日 太原及周边高速公路路况信息 湖北省竹山县是天气预报播报的哪个区域? 细菌和真菌对环境的作用是( ) 2月14日 太原及周边高速公路路况信息 无向有权的图的深度、广度优先遍历怎么做的啊,他的遍历序列怎么求... 细菌与环境的关系 荆州城墙以内是不是就是荆州城区城墙以外是荆州区 数据结构 图的深度遍历算法 细菌适宜在什么环境里生活 在用邻接表表示图时,对图进行深度优先搜索遍历的算法的时间复杂度为() 湖北省孝冒县天气最近三天 细菌对环境、人类的影响,真菌对环境、人类的影响 写出下图的深度优先遍历序列、广度优先遍历序列 细菌和真菌对环境的作用是(  ) A.破坏 B.保护 C.调节物质循环 D.无作 图的深度优先遍历Java算法 未来病菌,细菌对人类生活将有哪些影响??? 天气预报中,所说的江淮、江汉、江南这几个地区,分别包括哪些省市? 图深度优先遍历非递归算法 怎么写? 微生物对我们的生活有什么影响?