Visual C++ 6.0調(diào)試功能 圖解教程(4)--實例三
Posted on 2008-08-19 17:37 ∪∩BUG 閱讀(1241) 評論(0) 編輯 收藏 所屬分類: VC++/MFC學習筆記圖
-
實驗目的
熟悉圖的兩種常用的存儲結(jié)構(gòu),以及在這兩種存儲結(jié)構(gòu)上的兩種遍歷圖的方法,即深
度優(yōu)先遍歷和廣度優(yōu)先遍歷。進一步掌握遞歸算法的設(shè)計方法。
關(guān)于各種典型著名的復雜算法,在上機實習方面不做基本要求。更適合于安排大型課
程設(shè)計。
二.需求分析
本程序演示用C++編寫,完成有向圖的創(chuàng)建,用Prim算法實現(xiàn)最小生成樹,實現(xiàn)邊的插入和刪除.
輸入值的范圍:創(chuàng)建圖時要求輸入的結(jié)點個數(shù)不大于MaxVertices的值.在插入邊時要求原圖不存在起點和終點之間邊,并且插入的邊不是矩陣對角線上的邊.輸入的數(shù)據(jù)類型為整形.
輸出形式:以鄰接矩陣的形式輸出圖的數(shù)據(jù)項.如果操作非法則給出錯誤信息.
測試數(shù)據(jù)
A創(chuàng)建5個頂點4條邊的圖:輸入頂點分別為1,2,3,4,5;1和2之間,2和3之間,3和4 之間,4和5之間的權(quán)值分別為10,20,30,40.得到圖:
輸出頂點的信息(整型):
1 2 3 4 5
輸出鄰接矩陣 :
1: 0 10 1000 1000 1000
2: 1000 0 20 1000 1000
3: 1000 1000 0 30 1000
4: 1000 1000 1000 0 40
5: 1000 1000 1000 1000 0
B頂點4和3之間插入一條權(quán)值為50邊得
輸出頂點的信息(整型):
1 2 3 4 5
輸出鄰接矩陣 :
1: 0 10 1000 1000 1000
2: 1000 0 20 1000 1000
3: 1000 1000 0 30 1000
4: 1000 1000 50 0 40
5: 1000 1000 1000 1000 0
C刪除頂點4和3之間的邊得
輸出頂點的信息(整型):
1 2 3 4 5
輸出鄰接矩陣 :
1: 0 10 1000 1000 1000
2: 1000 0 20 1000 1000
3: 1000 1000 0 30 1000
4: 1000 1000 1000 0 40
5: 1000 1000 1000 1000 0
三.設(shè)計概要
(1)為了實現(xiàn)上述程序的功能,需要定義圖的抽象數(shù)據(jù)類型:
ADT Graph is{
數(shù)據(jù)對象:D={ai|ai∈IntegerSet,i=0,1,2,…,n,n≥0}
基本操作:
CreatG()
操作結(jié)果:創(chuàng)建有向圖
InsertE()
初始條件:有向圖已經(jīng)存在
操作結(jié)果:插入一條邊
DeleteE ()
初始條件: 有向圖已經(jīng)存在
操作結(jié)果:刪除一條邊
}END ADT BiTree
(2) 本程序包含一個類和一個結(jié)構(gòu)體類型
A無向圖類AdjMWGraph有7個函數(shù)
1主函數(shù) main()
2.構(gòu)造函數(shù) AdjMWGraph()
3. 創(chuàng)建圖函數(shù) CreatG(int n,int e)
4. 插入邊函數(shù) InsertE()
5. 刪除邊函數(shù) DeleteE()
6. 求最小生成樹Prim算法函數(shù) Prim()
B結(jié)構(gòu)體類型MinSpanTree
(3)本程序的兩個文件
1.頭文件 Graph.h
2.源文件 Graph.cpp
(4)函數(shù)之間的關(guān)系
四.詳細設(shè)計

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

五.心得:
這次實驗我把無向圖改成有向圖后,對實驗中給出的生成最小生成樹的Prim算法感到費解這里只能說說在實現(xiàn)插入和刪除時的心得.在創(chuàng)建圖時我在程序中加入判斷語句,因為在給邊權(quán)時如果頂點不存在會造成鎖死,嚴重影響調(diào)試.在創(chuàng)建和插入中主要判斷的是:1,頂點是否越界.2邊是否已經(jīng)存在.3插入位置是否是矩陣的對角線.在刪除中判斷1,頂點是否越界.2邊是否已經(jīng)存在.對于Prim算法的求最小生成樹的思想能夠理解,但對于算法的實現(xiàn)不甚理解.希望老師在下次實驗時講解.
六.使用說明
程序名為No5.exe運行環(huán)境為DOS,執(zhí)行后顯示:
在" 請輸入您的選擇(1,2,3,4):"后輸入數(shù)字選擇執(zhí)行的功能.
測試結(jié)果:
- 選擇1.輸入如圖:
得
- 選擇2操作如圖:
再次操作
再次操作
3)選擇3操作如圖
再次操作
再次操作
4) 選擇4或輸入非"1,2,3"的數(shù)字
七.調(diào)試過程
本程序主要對插入邊操作功能進行調(diào)試..
- 將光標移置Graph.cpp文件的void AdjMWGraph::InsertE()的第一條語句處Ctrl+F10開始單步調(diào)試
- 選擇1.后創(chuàng)建圖
再選擇2.
-
這時Debugger仍停留在void AdjMWGraph::InsertE()的第一條語句上.在中輸入numV, I, j ,i!=j ,Edge[i-1][j-1]進行觀察.F10單步至cin >> i >> j >> w;語句.然后在DOS窗口輸入4,3,55回車.
這時Debugger仍停留在if ( ( i != j ) && (i>0 && i<=numV) && (j>0 && j<=numV))處.可以在監(jiān)視1窗口中看到 i != j的值為true,即可以步入if()語句.
-
在監(jiān)視窗口1中輸入: (Edge[i-1][j-1] == MaxWeight), (Edge[i-1][j-1] != 0)進行觀察,F10單步調(diào)試,這時Debugger停留在if ( (Edge[i-1][j-1] != 0) && (Edge[i-1][j-1] == MaxWeight) )語句處,同時在監(jiān)視窗口1中可以看到(Edge[i-1][j-1] == MaxWeight), (Edge[i-1][j-1] != 0)都為真,即可以步入if()語句中.F10后可以看到Edge[i-1][j-1]值已經(jīng)變?yōu)?/span>55
-
F10單步調(diào)試到結(jié)束可以在DOS窗口中看到矩陣中相應的位置已經(jīng)改變
Shift+F5退出調(diào)試,完成調(diào)試演示.