数据结构1800关于图的代码精选(二)
考研数据结构
图的代码汇总(二)
一、已知无向图G,求图G的连通分量个数
int visited[Max]={0};
int Connectednum(ALGraph g){int num=0;for(int i=0;i<g.vexnum;i++){if(!visited[i]){num++;DFS(g,i);}}return num;
}
void DFS(ALGraph g,int v){visited[v]=1;ArcNode p=g.vertices[v].first;while(p){int j=p->adjvex;if(!visited[j]){DFS(g,j);}p=p->next;}
}
二、已知无向图采用邻接表存储方式,试写出删除边(i,j)的算法
void delete(ALGraph g, int i,int j){ArcNode p=g.vertices[i].first;ArcNode pre=p;if(p->adjvex==j){g.vertices[i].first=p->next;free(p);}else{p=p->next;while(p){if(p->adjvex==j){pre->next=p->next;free(p);}else{pre=p;p=p->next;}}}}
三、判断以邻接表方式存储的有向图中是否存在由顶点vi到vj的路径
int visited[Max]={0};
int judgeitoj(ALGraph g, int i,int j){if(i==j){return 1}visited[i]=1;ArcNode p=g.vertices[i].first;while(p){if(!visited[p->adjvex]){return judgeitoj(g,p->adjvex,j);}p=p->next;} return 0;
}
四、按图的宽度优先搜索法写一算法,判别以邻接矩阵存储的有向图中是否存在由顶点vi到顶点vj的路径
int judgeitoj(MGraph g, int i,int j){int Queue[Max],front=-1,rear=0;Queue[0]=i;while(front<rear){int u=Queue[++front];for(int k=0;k<g.vexnum;k++){if(g.Edge[u][k]==1&&k==j){return 1;}if(g.Edge[u][k]==1&&!visited[k]){visited[k]=1;Queue[++rear]=k;}}}return 0;
}
五、假设以邻接矩阵作为图的存储结构,编写算法,判定在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路
int Topsort(MGraph g){int Stack[Max],top=-1;int num=0;for(int i=0;i<g.vexnum;i++){if(indegree[i]==0){Stack[++top]=i;}}while(top!=-1){num++;int p=Stack[top--];for(int i=0;i<g.vexnum;i++){if(g.Edge[p][i]!=0){indegree[i]--;if(indegree[i]==0){Stack[++top]=i;}}}}if(num==g.vexnum){return 1;}else{return 0;}}
六、编写程序,判断一个用邻接表存储的有向图是否存在回路
int Topsort(ALGraph g){int Stack[Max],top=-1,num=0;for(int i=0;i<g.vexnum;i++){if(indegree[i]==0){Stack[++top]=i;}}while(top!=-1){num++;int j=Stack[++top];ArcNode p=g.vertices[j].first;while(p){int u=p->adjvex;indegree[u]--;if(indegree[u]==0){Stack[++top]=u;}p=p->next;}}if(num==g.vexnum){return 1;}else{return 0;}
}
七、在有向图G中,如果r到G中的每个结点都有路径可达,则称结点r为G的根节点,判断有向图G是否有根
void dfs(ALGraph g,int v){visited[v]=1;num++;if(num==g.vexnum){printf(v);num=0;}else{ArcNode p=g.vertices[v].first;while(p){int j=p->adjvex;if(!visited[j]) dfs(g,j);p=p->next;}num--;visited[v]=0;}
}
void rootnode(ALGraph g){for(int i=0;i<g.vexnum;i++){if(!visited[i]){dfs(g,i);}}
}
八、设无向图G用邻接表存储,试用宽度优先遍历写出求出图G中各联通分量个数的算法
int rootnode(ALGraph g){int num=0;for(int i=0;i<g.vexnum;i++){if(!visited[i]){bfs(g,i);num++;}}return num;
}void bfs(ALGraph g,int v){int Queue[Max],front=-1,rear=0;Queue[0]=v;while(front<rear){v=Queue[++front];visited[v]=1;ArcNode p=g.vertices[v].first;while (p){int j=p->adjvex;if(!visited[j]){Queue[++rear]=v;}p=p->next;}}}
九、设计算法以判断给定的无向图G中是否存在一条以v0为起点的包含所有顶点的简单路径
int num=0,path[Max];
void dfs(ALGraph g,int v){visited[v]=1;path[num++]=v;if(num==g.vexnum){for(int i=0;i<g.vexnum;i++){printf(path[i]);}}else{ArcNode p=g.vertices[v].first;while(p){int j=p->adjvex;if(!visited[j]){dfs(g,j);}p=p->next;}}
}
十、已有邻接表表示的有向图,请编程判断从顶点u至顶点v是否有简单路径,若有则打印出该路径上所有顶点
void dfs(ALGraph g,int u,int v){visited[v]=1;int Stack[Max],top=-1;Stack[++top]=u;while(top!=-1){ArcNode p=g.vertices[v].first;while(p&&visited[p->adjvex]){p=p->next;}if(!p)top--;else{int j=p->adjvex;if(j==v){for(int i=0;i<top;i++){printf(Stack[i]);}}else{visited[j]=1;Stack[++top]=j;}}}
}
数据结构1800关于图的代码精选(二)相关推荐
- 数据结构1800关于图的代码精选(三)
考研数据结构 图的代码汇总(三) 一.图的D_搜索类似于BFS,不同之处在于使用栈代替BFS中队列操作,写出搜索算法 void D_fs(ALGraph g,int v){int Stack[Max] ...
- 数据结构1800关于图的代码精选(一)
考研数据结构 图的代码汇总(一) 结构体 //邻接矩阵 typedef struct {int Vex[Max];int Edge[Max][Max];int vexnum,arcnum; }MGra ...
- 23种设计模式【全】 包含:模式定义 使用场景 实现步骤 优缺点 模式区别 UML类图 示例代码 注意项等
23种设计模式(全) ***项目地址***:[GitHub](https://github.com/yjhroot/design-pattern) 声明 模式分类(3大类) 创建型模式(共5种) 结构 ...
- 数据结构--图(Graph)详解(二)
数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...
- 数据结构之图的存储结构二及其实现
上一节我们讲述了邻接矩阵法实现图,本节再来讲述一下邻接链表法实现图. 邻接链表 邻接表是图的一种链式存储结构.在邻接表中,对图中的每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi边(对有 ...
- 数据结构探险之图篇(上)理论篇
数据结构探险之图篇 什么是图? 如下图:无向图 & 有向图 箭头分方向. 无向图中每条认为有来有回两条线 无向图&有向图 图中的概念: 有向图中的概念 结点称为顶点. 之间的线称为弧. ...
- 数据结构实验六 图的操作实现
数据结构实验六 图的操作实现 一.实验目的 1. 理解图的存储结构与基本操作: 2. 掌握图的创建过程 二.实验内容 1.根据下图,采用邻接矩阵的存储结构保存此图,并打印出邻接矩阵. 图的创建代码参考 ...
- CAUC数据结构与算法期末复习归纳(二)
CAUC数据结构与算法期末复习归纳(二) 二叉树 二叉树的周游 二叉树的抽象数据类型 深度优先周游二叉树或其子树 广度优先周游二叉树 二叉树的存储结构 二叉树的链式存储结构 二叉搜索树 二叉搜索树的性 ...
- 【数据结构基础】图的遍历方法与应用
前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...
最新文章
- 关于举办第十五届全国大学生 智能汽车竞赛的通知
- nginx php win平台配置
- Netty入门(七)使用SSL/TLS加密Netty程序
- Fast Walsh-Hadamard Transform——快速沃尔什变换
- 开源一个爬取redmine数据的测试报告系统
- 三星电视出现服务器未响应,三星电视遥控器失灵怎么办
- 桩筏有限元中的弹性板计算_采用PKPM系列JCCAD软件桩筏筏板有限元方法计算的模型参数 -...
- mysql found row_mysql found_row()使用详解
- python tkinter button_[转载]Python Tkinter之Button(转载)
- JDK 1.6环境变量的设置
- 103 解决粘包问题
- 二级c语言考试改卷标准,计算机二级c语言考试技巧
- java 正则表达式 html,java正则表达式语法大全
- XMPP即时通讯协议使用(一)——Openfire安装
- spring security 源码解析
- Sigma Function LightOJ - 1336
- 服务器的回收站在哪个文件夹,Windows系统回收站的文件保存在哪个磁盘上
- EXCEL VBA 实现翻译(简单对照)
- 我最喜欢的音乐系列之李连杰电影插曲
- '\0'和\0的区别
热门文章
- 《通灵芯片》阅读笔记 // 持续
- springboot使用arthas-spring-boot-starter引入arthas方案
- mac批量修改文件名、后缀名
- 基于 HTML5 + WebGL 的宇宙 3D 展示系统
- 蒙特卡洛-马尔科夫链(MCMC)初步
- Codasip通过收购Cerberus增强RISC-V处理器设计的安全性
- 美通企业周刊 | 中国平安将深度参与深圳公共住房建设;北京环球度假区将引入IMAX影院...
- 《钟馗伏魔:雪妖魔灵》另类解读
- 人生十鉴:大喜易失言,大哀易失值
- The Monster