关于图的理解和应用

qscool1987 2012-03-29 11:51:34
这是数据结构里面相当复杂的问题了,说到底它还是一种非连续的数据结构
既然是非连续的,那么每个结点自然保存了指向与它相连的结点的指针,只是这个指针不是一个了,而是不固定的多个或者没有(比如说拓扑排序后,最后的那个结点)

template<class Object>
class graph
{
public:
struct VertexNode
{
Object element;
list<VertexNode*> vTableList; //与顶点相关联的邻接表
};
private:
list<VertexNode> theList; //图的顶点链表
int theSize; //顶点个数
};

这就图的数据结构
对于图有个很关键的词叫做入度,一个结点的入度,指的是指向这个结点的指针个数和
另外就是拓扑结构,拓扑结构指的是没有回路的有向图,通过拓扑排序可以检测一个有向图是否有环
------------------------------------------------------------------------------------------------------------------------------
图的难点在于结点的邻接表不确定,构造一个图是相当复杂的,一般是用来处理实际中存在的问题,根据实际问题来构造图,并采用拓扑排序得到结点的拓扑编号,然后解决相应的问题。
有待深入研究......
另求批评指点,对于图的构造我确实想不出什么更好的方法,如果说给一个现实问题,到是可以构造出一个图。
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小班得瑞 2012-03-30
  • 打赏
  • 举报
回复
帮顶一下,我现在看到这里
qscool1987 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
本人还在大学中,不知道楼主具体意思
拓扑排序(Topological sorting?) 就是先走哪后走哪才能都走完对吗
用这个会生成一个list(很多种可能)而不是改变原图吧?这个list不就是告诉你先走哪再走哪就能完成此图?
还有,
我理解的图:假设有ABCDEFG 7个vertices
用个hashtable或者array of LinkedList
A-B-D //代表A连着B……
[/Quote]
你用的是邻接矩阵表示法
拓扑排序是从第一个入度为0的节点开始,依次删除它的节点和链,然后找下一个入度为零的节点并删除节点和链,直到所有结点被删掉为止,这样依次排序后得到的节点顺序就为图为图的拓扑排序
我的意思是说,我用代码去构造一个图比较困难,因为他的节点不像链表,树有固定的链数目,但是根据一个实际问题也就是说一个实际问题他的图是固定的,可以构造出来。
easonitit 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

不好意思 图少写了个 1 再D下面 应该是
A B C D E F G
A 1 1 1
B 1
C
D 1
E
F
G
[/Quote]

这。。发上来就到C下面了。。。反正你懂
easonitit 2012-03-30
  • 打赏
  • 举报
回复
不好意思 图少写了个 1 再D下面 应该是
A B C D E F G
A 1 1 1
B 1
C
D 1
E
F
G
easonitit 2012-03-30
  • 打赏
  • 举报
回复
本人还在大学中,不知道楼主具体意思
拓扑排序(Topological sorting?) 就是先走哪后走哪才能都走完对吗
用这个会生成一个list(很多种可能)而不是改变原图吧?这个list不就是告诉你先走哪再走哪就能完成此图?
还有,
我理解的图:假设有ABCDEFG 7个vertices
用个hashtable或者array of LinkedList
A-B-D //代表A连着B和D,A的degree(度?)为2,就是这行的length(从0开始)或者size-1
B-A-F //类推
C-D-G
D-C
E-F
F-E-B
G-C

或者用个2-dimentional array
如 Array mygraph[7][7] (因为A-G是7个字母)
然后想想成下图
A B C D E F G
A 1 1
B 1
C
D 1
E
F
G
图中 只表述了 A-B-D 的情况就是A连着B和D, 所以B也连着A; D也连着A; 其他的没填上。等填完了会发现是对称的(对角线) 所以只用一半内存就可以表述这图了,但比较麻烦
如果用以上2种方法表述directed graph, 可以稍作修改,如A-B-D, 但B不连A,就可以说明箭头是从A到B的等等,而第二种方法必须要用整个N*N内存了。
图的应用貌似挺多吧我只知道可以想象成database数据库,如把图分成很多部分(tables) 用一个末端(end point) 当做key(主键?) 之类的








其实我是回帖拿积分的。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧