第六章 6.6 图的应用
来源:互联网 发布:网络教学系统 编辑:程序博客网 时间:2024/06/03 08:58
6.6.1最小生成树
6.6.2 最短路径
6.6.3 拓扑排序
#include<bits/stdc++.h>#include<stack>using namespace std;#define MVNum 100#define OK 1#define ERROR 0typedef int OtherInfo;typedef int Status;typedef int VerTexType;typedef struct ArcNode{//边结点 int adjvex;//该边所指向的顶点的位置 struct ArcNode *nextarc;//指向下一条边的指针 OtherInfo info;//和边有关的信息 }ArcNode;typedef struct VNode{ VerTexType data;//顶点信息 ArcNode *firstarc;//指向第一条依附该顶点边的指针 }VNode,Adjlist[MVNum];//Adjlist表示邻接表类型 typedef struct{//邻接表 Adjlist vertices; int vexnum,arcnum;//图的当前顶点数和边数 }ALGraph;Status LocateVex(ALGraph G,char ch){ int i; for(i = 0; i < G.vexnum ; i ++) { if(G.vertices[i].data == ch -'0') return i; }}Status CreatUDG(ALGraph &G){ char v1,v2; int i,j,k; ArcNode *p1,*p2; cin>>G.arcnum>>G.vexnum ;//读入图的总边数和顶点数 for(i = 0; i < G.vexnum ; i ++) { cin>>G.vertices[i].data ; G.vertices[i].firstarc = NULL; } for(k = 0; k < G.vexnum ; k ++) { cin>>v1>>v2; i = LocateVex(G,v1); j = LocateVex(G,v2); p1 = new ArcNode; p1->adjvex = j; p1->info = i; p1->nextarc = G.vertices[i].firstarc ; G.vertices[i].firstarc = p1; p2 = new ArcNode; p2->adjvex = i; p2->info = j; p2->nextarc = G.vertices[j].firstarc ; G.vertices[j].firstarc = p2; } return OK;}int FindInDegree(ALGraph G,int indegree[]){ for(int i = 0;i < G.vexnum ;i ++) { ArcNode *p1 = G.vertices[i].firstarc; while(p1->nextarc !=NULL) { indegree[p1->nextarc->adjvex]++; p1 = p1->nextarc ; } } return OK;}Status TopologicalSort(ALGraph G,int topo[]){ stack<int>S; int indegree[MVNum]; int i,m,k; ArcNode *p; memset(indegree,0,sizeof(indegree)); FindInDegree(G,indegree);//求出各顶点的入度存入数组indegree中 for(i = 0; i < G.vexnum ; i ++) { if(!indegree[i])//入度为0者进栈 S.push(i); } m = 0; while(!S.empty()) { i = S.top();//将栈顶vi出栈 S.pop(); topo[m++] = i;//对输出顶点计数 //将vi保存在拓扑排序数组topo中 p = G.vertices[i].firstarc ;//p指向vi的第一个邻接点 while(p != NULL) { k = p->adjvex ;//vk为vi的邻接点 -- indegree[k];//vi的每个邻接点的入度减1 if(indegree[k] == 0)//若入度减为0,则入度 S.push(k); p = p->nextarc ;//p指向顶点vi的下一个邻接点 } } if(m < G.vexnum )//该图有回路 return ERROR; return OK;}int main(){ ALGraph G; int topo[MVNum]; CreatUDG(G); TopologicalSort(G,topo); return 0;}
阅读全文
0 0
- 第六章 6.6 图的应用
- 第六章 Android应用的资源
- 锋利的jQuery 第六章 jQuery于Ajax的应用
- 第六章 数码管的动态显示+计时器的应用
- 高数第六章 定积分的应用
- 《锋利的jQuery》第六章、 jQuery与Ajax应用
- 《learning laravel》翻译第六章-----部署我们的Laravel应用
- 计算机应用基础第六章
- 第六篇--adapter的理解及应用
- HTML5第六课时,li的应用
- HTML5第六课时,布局的简单应用
- 第六章 模型-视图-控制器应用程序设计
- 第六章 表视图高级应用
- 第六章(7).哈夫曼树及其应用
- 第六章:图的思维导图
- 第六章 6.4 图的存储结构
- 第六章 6.5 图的遍历
- 第六章的程序
- 题目大全(做了与没做之类的)
- 【Selenium】Geckodriver版本与Firefox版本映射关系
- Android开发当中SQLite数据库的应用
- 抛弃爬下来的灰色数据,有门槛的风控怎么做?
- TabLayout+ViewPager+Fragment
- 第六章 6.6 图的应用
- ES6核心内容讲解
- Redis安装报错error:jemalloc/jemalloc.h:No such file or directory解决方法
- 专业的优化服务,就是为你争取时间!
- Deformable Convolutional Networks解读
- Mac下python3的pip下载的安装包路径
- Building online HBase cluster of Zhihu based on Kubernetes
- Java复习笔记(四)-----拷贝和关键字static
- MYSQL explain详解