数据结构1800关于图的代码精选(三)
考研数据结构
图的代码汇总(三)
一、图的D_搜索类似于BFS,不同之处在于使用栈代替BFS中队列操作,写出搜索算法
void D_fs(ALGraph g,int v){int Stack[Max],top=-1;Stack[++top]=v;while(top!=-1){v=Stack[top--];visited[v]=1;ArcNode p=g.vertices[v].first;while(p){int j=p->adjvex;if(!visited[j]){Stack[++top]=j;}p=p->next;}}
}
二、设图用邻接表表示,写出求指定结点到其余个顶点的最短路径的Dijkstra算法
int dist[Max];
void dijstra(ALGraph g,int v){ArcNode p=g.vertices[v].first;int s[Max];s[v]=1;while(p){dist[p->adjvex]=p->weight;p=p->next;}for(int i=0;i<g.vexnum;i++){int mindis=Max;int u;for(int j=0;j<g.vexnum;j++){if(s[j]==0&&dist[j]<mindis){u=j;mindis=dist[j];}}s[u]=1;p=g.vertices[i].first;while(p){int j=p->adjvex;if(s[j]==0&&dist[j]>mindis+dist[u]){dist[j]=mindis+dist[u];}p=p->next;}}
}
三、已知n个顶点的有向图用邻接矩阵表示,编写函数,计算每对顶点之间的最短路径
int length[Max][Max];
void Floyd(MGraph g){int n=g.vexnum;for(int k=0;k<n;k++){for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(length[i][k]+length[k][j]<length[i][j]){length[i][j]=length[i][k]+length[k][j];}}}}
}
四、设计算法,求距离顶点v0的最短路径长度为k的所有顶点
void layer(ALGraph g,int v,int k){int Queue[Max],front=-1,rear=0;int last=0,level=1;int flag=0;Queue[0]=v;while(front<rear&&level<=k+1){v=Queue[++front];visited[v]=1;ArcNode p=g.vertices[v].first;while(p){if(!visited[p->adjvex]){Queue[++rear]=p->adjvex;visited[p->adjvex]=1;if(level==k+1){flag=1;printf(p->adjvex);}p=p->next;}}if(front==last){last=rear;level++;}}if(flag==0){printf("没有")}
}
五、采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径算法
int dfs(ALGraph g,int i,int j,int k){if(i==j&&k==0) return 1;else if(k>0){visited[i]=1;for(ArcNode p=g.vertices[i].first;p;p=p->next){if(!visited[p->adjvex]){return dfs(g,p->adjvex,j,k-1);}}visited[i]=0;}return 0;
}
六、对于一个使用邻接表存储的有向图G,可以利用深度优先遍历方法对该图中的所有顶点进行拓扑排序
int indegree[Max];
ArcNode final;
void dfs(ALGraph g,int v){int j;ArcNode t=malloc(sizeof(ArcNode));t->adjvex=v;t->next=final;final=t;ArcNode p=g.vertices[v].first;while(p){int j=p->adjvex;indegree[j]--;if(indegree[j]==0&&visited[j]==0){visited[j]=1;dfs(g,j);}p=p->next;}
}
void topsort(ALGraph g){int length[Max],zero=0;for(int i=0;i<g.vexnum;i++){if(indegree[i]==0){length[zero++]=i;}}if(zero==0)return ;for(int i=0;i<zero;i++){dfs(g,length[i]);}while(final){printf(final->adjvex);final=final->next;}
}
数据结构1800关于图的代码精选(三)相关推荐
- 数据结构1800关于图的代码精选(二)
考研数据结构 图的代码汇总(二) 一.已知无向图G,求图G的连通分量个数 int visited[Max]={0}; int Connectednum(ALGraph g){int num=0;for ...
- 数据结构1800关于图的代码精选(一)
考研数据结构 图的代码汇总(一) 结构体 //邻接矩阵 typedef struct {int Vex[Max];int Edge[Max][Max];int vexnum,arcnum; }MGra ...
- 数据结构--图(Graph)详解(三)
数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...
- 第一行代码-android-第三版-pdf扫描-思维导图-课件-源码
第一行代码-android-第三版-pdf扫描-思维导图-课件-源码 一帮公众号各种要你关注, 各种压缩包层层套娃要密码, 还要进群, 真他妈日了gou了,找了半天 分享给大家, 毫无套路! pdf扫 ...
- 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...
数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...
- 数据结构探险之图篇(上)理论篇
数据结构探险之图篇 什么是图? 如下图:无向图 & 有向图 箭头分方向. 无向图中每条认为有来有回两条线 无向图&有向图 图中的概念: 有向图中的概念 结点称为顶点. 之间的线称为弧. ...
- 【数据结构基础】图的遍历方法与应用
前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...
- 8266+DS3231时钟之DS3231具体实现及代码【三】
这个时钟系列目前五篇分别是: <8266+DS3231时钟之开发个时钟遇到的N个坑[一]> <8266+ds3231时钟之arduino官网发布的DS3231库的分析[二]> ...
- 23种设计模式【全】 包含:模式定义 使用场景 实现步骤 优缺点 模式区别 UML类图 示例代码 注意项等
23种设计模式(全) ***项目地址***:[GitHub](https://github.com/yjhroot/design-pattern) 声明 模式分类(3大类) 创建型模式(共5种) 结构 ...
最新文章
- 《复杂》读书笔记(part7)--遗传算法
- 带着canvas去流浪系列之七 绘制水球图
- 文件存储demo,直接存储内容到本地中。
- weblogic mysql数据源配置文件_通过weblogic数据源实现配置oracle and mysql方法
- jquery dropload
- 计算机系统结构概念,计算机系统结构的基本概念
- 数据库变为可疑_数据库显示可疑的修复方法
- 高斯滤波详解 附python和matlab高斯滤波代码
- newton's three laws of motion(牛顿三大运动定律)
- 万字实录:从DDCTF大赛看当前网络安全新趋势 | 硬创公开课总结文+视频(下篇)...
- SQL Server练习
- linux下装go环境
- 【bat/batch】bat中的转义字符
- 图像情感识别研究方向
- spring使用中applicationContext.xml文件头部声明
- python保留两位小数_python格式化输出保留2位小数的实现方法
- 滴滴出行用户运营分析
- 中公教育 java讲师_【java讲师职责】中公教育集团2021年java讲师工作内容-看准网...
- Linux JDK 卸载安装
- 理解CSV格式规范(解析CSV必备)