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#include#include#defineMAX100#defineMAXNUM10000000intprevious[MAX-1];//需要intpp[MAX-1]来查找路径;//注册最短路径typedefstructgraphnode{intvexnum;//顶点intarcnum;//弧intgra[MAX][MAX];//邻接矩阵0或1}graph;代表intdist[MAX];//最短距离intarc[MAX][MAX];//对intmain(){voidDijkstra(graph*g,intv);inti,j,n,m;intv;//来源点图*G;G=(graph*)malloc(size(graph));printf("vexnum:\n");scanf("%d",&G->vexnum);printtf("arcnum:\n");scanf("%d",&G->arcnum);printf("图:\n");for(i=0;ivexnum;i++)for(j=0;jvexnum;j++){scanf("%d",&G->gra[i][j]);}for(i=0;ivexnum;i++)for(j=0;jvexnum;j++){if(G->gra[i][j]==1){printf()"请输入从%d到%d的重量:",i,j);scanf("%d",&arc[i][j]);//如果有弧线,则直接输入从i开始的重量toJ}elearc[i][j]=MAXNUM;}printf("请来源点v输入值:");scanf("%d",&v);Dijkstra(G,v);printf("请输入要访问的源点:\n");scanf("%d",&n);pp[0]=0;i=1;m=n;//注册n值while(n!=0)//求从0到其他点的路径{pp[i]=prev[n];i++;n=前一个[n];}printf("路径:0->");for(j=G->vexnum-1;j>=0;j--)if(pp[j]!=0)printf("%d->",pp[j]);printf("%d\n",m);返回0;}voidDijkstra(graph*g,intev){intprevious[MAX-1];intnewdist;boolsign[MAX];if(v<0>MAX-1){printf("该源点不存在!\n")for(inti=0;ivexnum;i++);{距离[i]=arc[v][i];符号[i]=假;if(dist).)if((!si)gn[j])&&(dist[j]vexnum;j++)if((!symbol[j])&&(arc[u][j]vexnum;i++)if(dist[i]!=MAXNUM)printf("从%d到%的最大值d最短路径%d\n",v,i,dist[i]);elseprintf("没有从%d到%d\n的捷径",v,i);printf("\n");}这是Dijkstra算法寻找单源的最短算法,程序假设从0开始,搜索整个图,然后找到0到其他点的最短距离,保存在dist数组中从0到到其他点的路线可能会满足您的要求

请问C语言中for(i=0,i<G.vexnum,++i)与for(i=0,i<G.vexnum,i++)有什么区别?

首先,这种写法根本就是错误的,因为for必须包含至少两个分号,而不是逗号。
其次,如果我们只关注这句话的明显含义,那就没有区别。
只有i++和++i,是有区别的。
热门文章
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数据库常用命令(新建&#47;删除&#47;查询&am...

8
MySQL数据库备份与增量备份策略详解 mysql数据库备份方法有什么?MySQL数据库自动备份解决方案在使用MySQL...

9
Python中==与=的区别:深度解析与... python中==和=的区别Python中的对象包含三个元素:id、type和v...

10
MySQL数据库安装路径解析与配置文件备... mysql数据库在哪个路径下?默认的MySQL数据库存储在...\MySQL\M...