C语言实现图遍历与Dijkstra算法:深度优先与广度优先搜索
创始人
2024-12-15 06:34:02
0 次浏览
0 评论
用C语言编程,做出的给分
输入图顶点和弧弧数CreateteGraph(G);//邻接表结构DFSTravers(G);//深度优先搜索遍历图BFSTravers(G);//广度优先搜索遍历图printf("图遍历完成,继续)生成图表继续吗?*s;for(i=1;i<=G.vexnum;i++)G.AdjList[i]=NULL;//初始化指针数组for(i=1;i<=G.arcnum;i++){scanf("%d,%d",&start,&end);//输入圆弧的起点和终点s=(ArcNode*)malloc(sizeof(ArcNode));//生成圆弧节点s->nextarc=G.AdjList[start];//插入邻接表s->adjvex=end;G.AdjList[start]=s;if(G.GraphKind==0)//如果是一个间接是一个图,然后向其中插入一条弧链中的终点{s=(arcNode*)malloc(size(arcNode));s->nextarc=G.AdjList[end];s->adjvex=start;G.AdjList[结束]=S;)visited[i]=False;//(i=1;i<=G.vexnum;i++)if(!visited[i])DFS(G,i);//初始化未访问Vertex调用的访问标志数组dfSprintf("\b\b\n");}voidDFS(GraphG,inti){//从第i个顶点开始递归遍历图Gintw的深度;第个顶点Printf("%d->",i);for(w=FirstAdjVex(G,i);w;w=NextAdjVex(G,i,w))if(!visited[w])DFS(G,w);//尚未访问过的相邻顶点w称为DFS}voidBFSTravers(GraphG).Q;printf('bfsreverse:');for(i=1;i<=G.vexnum;i++)visited[i]=False;//访问标志数组初始化初始化(Q);//…(i=1;i<=G.vexnum;i++)if(!visited[i]){visited[i]=True;//转到顶部iprintf("%d->",开始i的队列);入队(Q,i);//将序号i放入队列while(!QueueEmpty(Q))//如果队列不为空,则继续{DeQueue(Q,u);//删除队列的主元素,并用ufor(w=KeepasFirstAdjVex(G,u);w;w=NextAdjVex(G,u,w))if(!visited[w])//访问未访问的相邻顶点w并将其放入队列中{访问[w]=True;printf("%d->",w);EnQueue(Q,w);}}}printf("\b\b\n");}intFirstAdjVex(GraphG,intv){//查找图G中的第v个顶点if相邻顶点(!G.AdjList[v])return0;elsereturn(G.AdjList[v]->adjvex);}intNextAdjVex(GraphG,intv,intu){//图GArcNode*p;p=G.AdjList[v];while(p->adjvex)查找第v个顶点相对于你的下一个相邻顶点!=u)p=p->nextarc;//查找顶点v的弧链中的顶点uif(p->nextarc==NULL)return0;//如果这是最后一个顶点,则返回0elsereturn(p->nextarc->adjvex);//返回下一个相邻顶点的序号}voidInitial(SqQueue&Q){//队列初始化Q.front=Q.rear=0;}BOOLQueueEmpty(SqQueueQ){//判断队列是否为空,如果为空则返回True,否则返回Falseif(Q.front==Q.rear)returnTrue;elsereturnFalse;}returnBOOLenQueue(SqQueue&Q,intch){//进入队列,成功返回True,失败返回Falseif((Q.rear+1)%MAXQSIZE==Q.前)returnFalse;Q.elem[Q.rear]=ch;Q.rear=(Q.rear+1)%MAXQSIZE;returnTrue;}BOOLDeQueue(SqQueue&Q,int&ch){//出队,成功则返回True,用ch返回元素值,否则Falseif(Q.front==Q.rear)returnFalse;ch=Q.elem[Qfront];Q..front=(Q)return.front+1)%MAXQSIZE;returnTrue;//成功删除队列,返回True}c语言编写路线
#include请问C语言中for(i=0,i<G.vexnum,++i)与for(i=0,i<G.vexnum,i++)有什么区别?
首先,这种写法根本就是错误的,因为for必须包含至少两个分号,而不是逗号。其次,如果我们只关注这句话的明显含义,那就没有区别。
只有i++和++i,是有区别的。
相关文章

高效SQL字符串替换技巧:一招掌握多种替...
2024-12-16 22:34:33
Redis Windows部署与服务启动...
2025-03-11 22:18:46
3DMAX与OPENGL结合:ASE文件...
2025-01-17 21:21:18
MySQL三大日志:binlog、red...
2025-01-11 10:58:42
Windows下Redis安装教程:轻松...
2025-02-26 05:49:53
MySQL MAX函数应用:高效查询与调...
2024-12-24 14:05:35
基于Docker快速搭建Redis-Se...
2024-12-31 12:16:45
SQL Server表字段备注管理:添加...
2025-03-01 18:19:03
CentOS 8 MySQL 5.7 R...
2025-01-14 08:31:25
C语言字符数组单字符输入输出方法及注意事...
2024-12-15 00:02:40最新文章
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
04
2025-04
热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
2
MySQL分区删除技巧与8.0版本新特性...
mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...
3
Python代码实现:如何判断三角形的三...
python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...
4
深度解析:MySQL查询语句执行顺序及优...
mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...
5
SQL教程:使用SUBSTRING和IN...
sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...
6
MySQL日期差异计算方法:轻松获取日期...
MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...
7
MySQL及SQL查询获取前10条数据方...
MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...
8
MySQL启动问题排查与解决指南
Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...
9
DbVisualizer添加MySQL数...
如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...
10
SQL字段默认值设置全攻略:轻松实现自动...
sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...