第12周项目2-操作用邻接表存储的图
2015-11-23 16:04
323 查看
/*
* Copyright (c)2015,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:项目2.cbp
* 作者:李竹雅
* 完成日期:2015年11月23日
* 版 本 号:v1.0
* 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法:
* 输入描述:无
* 程序输出:测试数据
*/
测试用图:
1.输出上图每个顶点的出度
代码:
运行结果:
2.求上图出度最大的顶点,输出该顶点编号:
代码:
运行结果:
3.计算图中出度为0的顶点个数
代码:
运行结果:
4.判断图中是否存在<i,j>
代码:
运行结果:
知识点总结:
图算法库的应用。
* Copyright (c)2015,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:项目2.cbp
* 作者:李竹雅
* 完成日期:2015年11月23日
* 版 本 号:v1.0
* 问题描述:假设图G采用邻接表存储,分别设计实现以下要求的算法:
* 输入描述:无
* 程序输出:测试数据
*/
测试用图:
1.输出上图每个顶点的出度
代码:
#include "graph.h" //返回图G中编号为v的顶点的出度 int OutDegree(ALGraph *G,int v) { ArcNode *p; int n=0; p=G->adjlist[v].firstarc; while (p!=NULL) { n++; p=p->nextarc; } return n; } //输出图G中每个顶点的出度 void OutDs(ALGraph *G) { int i; for (i=0; i<G->n; i++) printf(" 顶点%d:%d\n",i,OutDegree(G,i)); } int main() { ALGraph *G; int A[7][7]= { {0,1,1,1,0,0,0}, {0,0,0,0,1,0,0}, {0,0,0,0,1,1,0}, {0,0,0,0,0,0,1}, {0,0,0,0,0,0,0}, {0,0,0,1,1,0,1}, {0,1,0,0,0,0,0} }; ArrayToList(A[0], 7, G); printf("各顶点出度:\n"); OutDs(G); return 0; }
运行结果:
2.求上图出度最大的顶点,输出该顶点编号:
代码:
#include "graph.h" //返回图G中编号为v的顶点的出度 int OutDegree(ALGraph *G,int v) { ArcNode *p; int n=0; p=G->adjlist[v].firstarc; while (p!=NULL) { n++; p=p->nextarc; } return n; } //输出图G中每个顶点的出度 void OutDs(ALGraph *G) { int i; for (i=0; i<G->n; i++) printf(" 顶点%d:%d\n",i,OutDegree(G,i)); } //输出图G中出度最大的一个顶点 void OutMaxDs(ALGraph *G) { int maxv=0,maxds=0,i,x; for (i=0; i<G->n; i++) { x=OutDegree(G,i); if (x>maxds) { maxds=x; maxv=i; } } printf("顶点%d,出度=%d\n",maxv,maxds); } int main() { ALGraph *G; int A[7][7]= { {0,1,1,1,0,0,0}, {0,0,0,0,1,0,0}, {0,0,0,0,1,1,0}, {0,0,0,0,0,0,1}, {0,0,0,0,0,0,0}, {0,0,0,1,1,0,1}, {0,1,0,0,0,0,0} }; ArrayToList(A[0], 7, G); printf("最大出度的顶点信息:"); OutMaxDs(G); return 0; }
运行结果:
3.计算图中出度为0的顶点个数
代码:
#include "graph.h" //返回图G中编号为v的顶点的出度 int OutDegree(ALGraph *G,int v) { ArcNode *p; int n=0; p=G->adjlist[v].firstarc; while (p!=NULL) { n++; p=p->nextarc; } return n; } //输出图G中每个顶点的出度 void OutDs(ALGraph *G) { int i; for (i=0; i<G->n; i++) printf(" 顶点%d:%d\n",i,OutDegree(G,i)); } //输出图G中出度为0的顶点数 void ZeroDs(ALGraph *G) { int i,x; for (i=0; i<G->n; i++) { x=OutDegree(G,i); if (x==0) printf("%2d",i); } printf("\n"); } int main() { ALGraph *G; int A[7][7]= { {0,1,1,1,0,0,0}, {0,0,0,0,1,0,0}, {0,0,0,0,1,1,0}, {0,0,0,0,0,0,1}, {0,0,0,0,0,0,0}, {0,0,0,1,1,0,1}, {0,1,0,0,0,0,0} }; ArrayToList(A[0], 7, G); printf("出度为0的顶点:"); ZeroDs(G); return 0; }
运行结果:
4.判断图中是否存在<i,j>
代码:
#include "graph.h" //返回图G中编号为v的顶点的出度 int OutDegree(ALGraph *G,int v) { ArcNode *p; int n=0; p=G->adjlist[v].firstarc; while (p!=NULL) { n++; p=p->nextarc; } return n; } //输出图G中每个顶点的出度 void OutDs(ALGraph *G) { int i; for (i=0; i<G->n; i++) printf(" 顶点%d:%d\n",i,OutDegree(G,i)); } //输出图G中出度最大的一个顶点 void OutMaxDs(ALGraph *G) { int maxv=0,maxds=0,i,x; for (i=0; i<G->n; i++) { x=OutDegree(G,i); if (x>maxds) { maxds=x; maxv=i; } } printf("顶点%d,出度=%d\n",maxv,maxds); } //输出图G中出度为0的顶点数 void ZeroDs(ALGraph *G) { int i,x; for (i=0; i<G->n; i++) { x=OutDegree(G,i); if (x==0) printf("%2d",i); } printf("\n"); } //返回图G中是否存在边<i,j> bool Arc(ALGraph *G, int i,int j) { ArcNode *p; bool found = false; p=G->adjlist[i].firstarc; while (p!=NULL) { if(p->adjvex==j) { found = true; break; } p=p->nextarc; } return found; } int main() { ALGraph *G; int A[7][7]= { {0,1,1,1,0,0,0}, {0,0,0,0,1,0,0}, {0,0,0,0,1,1,0}, {0,0,0,0,0,0,1}, {0,0,0,0,0,0,0}, {0,0,0,1,1,0,1}, {0,1,0,0,0,0,0} }; ArrayToList(A[0], 7, G); printf("边<2,6>存在吗?"); if(Arc(G,2,6)) printf("是\n"); else printf("否\n"); printf("\n"); return 0; }
运行结果:
知识点总结:
图算法库的应用。
相关文章推荐
- 做一个Active To
- 本人对Oracle Inventory模块的一些了解
- linux shell编程
- Web Service入门教程
- 编译spark输出的信息
- 学习日记--网络通信框架--Volley应用
- Cookie工具类
- 声波通信开源项SinVoice介绍三
- 委托-异步调用-泛型委托-匿名方法-Lambda表达式-事件
- 问题:Oracle to_date;结果:oracle常用的时间格式转换
- C#反射取得方法、属性、变量
- proxool+tomcat配置
- Android double保留两位小数:截取 和 四舍五入
- 泊松分布和泊松过程
- linux block IO open的顺序图(二)
- 关于tableviewCell的一些小技巧
- SqlServer表数据与excel中数据的互相复制
- 装系统
- Activity启动过程全解析
- 数据结构实践——二叉树算法验证(哈夫曼编码的算法验证)