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,是有区别的。
相关文章
MySQL启动失败?5招解决常见问题攻略
2024-12-15 12:24:04深入解析:SQL语句执行顺序与优化技巧
2024-12-15 07:48:31Linux下SQL执行与定时任务Cron...
2024-12-17 04:12:06MySQL日期字段加一天:UPDATE操...
2024-12-18 00:38:13MySQL清空表数据:DELETE、TR...
2024-12-18 22:46:18Windows 10/7 Redis安装...
2024-12-15 11:50:01SQL2008数据库还原错误3241及指...
2024-12-19 21:51:32MySQL误删表格恢复攻略:备份与Bin...
2024-12-21 03:17:39SQL Server 2000服务启动故...
2024-12-17 23:34:01SQL字符串到日期转换技巧解析
2024-12-15 15:28:41最新文章
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
热门文章
1
SQL2000数据库备份压缩技巧:优化空...
怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...
2
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
3
SQL字符串处理技巧:单引号使用与转义标...
SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...
4
Windows环境下Redis安装指南与...
redis安装windowsredis基本简介与安装安装Redis首先需要获取安...
5
深度解析:Redis性能优势与局限性,助...
redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...
6
深入解析:MySQL数据库的特性与应用
mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...
7
掌握MySQL常用命令:高效管理数据库的...
MySQL数据库常用命令(新建/删除/查询&am...
8
MySQL数据库备份与增量备份策略详解
mysql数据库备份方法有什么?MySQL数据库自动备份解决方案在使用MySQL...
9
Python中==与=的区别:深度解析与...
python中==和=的区别Python中的对象包含三个元素:id、type和v...
10
MySQL数据库安装路径解析与配置文件备...
mysql数据库在哪个路径下?默认的MySQL数据库存储在...\MySQL\M...