邻接矩阵存储图的两种遍历方式

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

下面是用邻接矩阵存储一个无向图的深度优先遍历和广度优先遍历代码,深度优先遍历就是树的先根遍历的一种推广,而广度优先也是和树的层次遍历相似的,用邻接矩阵存储,进行这两种遍历的实现,是比较容易的。

因为用了自己写的循环队列的模版,所以代码看起来有点冗长.

1.#include

2.#include

ing namespace std;

4.

5.//下面是循环队列模版

6.template

7.class My_queue;

8.

9.template

10.class Node

11.{

12.private:

13. T data;

14. Node *next;

15.public:

16. Node()

17. {

18. next=0;

19. }

20. Node(T d)

21. {

22. data=d;

23. next=0;

24. }

25.friend My_queue;

26.};

27.

28.template

29.class My_queue

30.{

31.private:

32. Node *tail;

33.public:

34. My_queue()

35. {

36. tail=new Node();

37. tail->next=tail;

38. }

39.

40. ~My_queue()

41. {

42. clean();

43.delete tail;

44. }

45.

46.bool empty()

47. {

48.return (tail->next==tail);

49. }

50.

51.void push(T d)

52. {

53. Node *p=new Node(d);

54. p->next=tail->next;

55. tail->next=p;

56. tail=p;

57. }

58.

59. T front()

60. {

61.if(empty())

62. {

63. cout<<"queue is empty!"<

64. exit(0);

65. }

66. Node *p=tail->next;

67. T data=p->next->data;

68.return data;

69. }

70.

71. T back()

72. {

73.if(empty())

74. {

75. cout<<"queue is empty!"<

76. exit(0);

77. }

78. T data=tail->data;

79.return data;

80. }

81.

82.void pop()

83. {

84. Node *p=tail->next;

85. Node *q=p->next;

86. p->next=q->next;

87.if(q==tail)

88. tail=p;

89.delete q;

90. }

91.

92.void clean()

93. {

94. Node *p=tail->next;

95. Node *q=p->next;

96.while(q!=p)

97. {

98. p->next=q->next;

99.delete q;

100. p->next=q;

101. }

102. }

103.};

104.

105.#define MAX_VERTEX_NUM 20

106.

107.bool visited[20];//全局数组,用于辅助遍历

108.

109.struct MGraph

110.{

111. string vexs[MAX_VERTEX_NUM];//顶点数组

112.int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵

113.int vexnum;//顶点数目

114.int arcnum;//边数目

115.};

116.

117.int Locate_Vex(MGraph G,string x) //用于确定顶点在顶点数组中的位置118.{

119.for(int k=0;G.vexs[k]!=x;k++);

120.return k;

121.}

122.

123.void CreateUDN_MG(MGraph &G)

124.{

相关文档
最新文档