图的实现
一、需求分析
【问题描述】
l
需要分别基于邻接矩阵和邻接表来实现图 ADT
l
需要实现图的各个基本操作
l
小明最近在学习数据结构中图的相关知识,他需要输出有向图的邻
接矩阵并找出有向图中出度最大的点。你能帮他解决这个问题么?
【输入形式】
每一组第一行有两个数 n、m 表示 n 个顶点,m 条有向边。
输入顶点信息,并用空格隔开,顶点信息以大写字母表示
接下来有 m 行,每行三个数 u、v、w 代表权值为 w 的一条由 u 到 v 的有向
边
注意: 2<=n<=10,n<m<=10,w 为正整数,输入保证没有自环
【输出形式】
输出矩阵:每条边发出的顶点对应行,进入的顶点对应列
输出的第一个字符为出度和最大的点所表示的字符,第二个为该点的出度
的值,如果出度相同,则依据点的字符大小,输出字符大的点。
【样例输入】
4 3
A B C DA B 1
B C 1
B D 1
【样例输出】
0 1 0 0
0 0 1 1
0 0 0 0
0 0 0 0
B 2
二、概要设计
1. 算法思想
对图的元素按邻接矩阵或者邻接表存储,计算每个节点计算每个节点
的出度并输出结果。对图按邻接矩阵或者邻接表存储,首先需要建图,
首节点的指针代表图,对邻接矩阵,每个节点要求包含存储元素,建
立邻接矩阵记录位置;对于邻接表,每个节点要求包含存储元素和下
一个节点的指针,一记录所有节点的位置。对于整个图来说,对每个
节点都要求能得出下一个节点的位置和数据,两个节点之间的权值,
节点是否标记,删除一条边,清除图等操作。
2. ADT 设计
使用字符输入图的基本元素,整数输入每条边的权值,未输入的权值
默认为 0.
数据对象:一组字符数据关系:通过键盘依次输入,按照输入的先后次序输入,按逻辑的
相互缠绕,满足图状结构。
基本操作:使用邻接矩阵或者邻接表存储图的元素,找出出度最大的
节点的值和出度。
3. 程序设计流程
输入模块:输入顶点数和边的数目,输入相邻两条边的权值
图的建立及物理结构存储:使用顶点指针代表图,建图并使用邻接矩
阵或者邻接表存储元素。
输出模块:输出邻接矩阵的存储并输出出度最大的点的值。
三、详细设计
Graph.h 构造图的节点类,Graphm.h 构造图类,Graphm.cpp 实现
图类的基本操作,main.cpp 测试程序。
邻接矩阵:
Graph.h
Graphm.h
Graphm.cpp
 
v>
Main.cpp
v>
邻接表:
Node.h
v>
graghLi .h
v>
graghLiCode.h
 
Main.cpp
四、测试与分析
 

                
            
        
浙公网安备 33010602011771号