Skip to content

Commit 9c96bb8

Browse files
authored
Merge pull request #41 from Alokih/prims-algorithm-fix
Fix Prim's algorithm implementation and update tests
2 parents c0bd677 + f02fb33 commit 9c96bb8

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

src/AI-Algorithms-Graph-Tests/AIPrimTest.class.st

+15-12
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ AIPrimTest >> setUp [
1919
{ #category : 'tests' }
2020
AIPrimTest >> testMinSpanningTreeComplex2 [
2121

22-
| tree graphType graph |
22+
| resultEdges graphType graph |
2323
graphType := AICyclicWeightedComplexFixture new.
2424
graph :=graphType complexWeightedGraph4.
2525
prim nodes: graph nodes.
@@ -28,17 +28,18 @@ AIPrimTest >> testMinSpanningTreeComplex2 [
2828
from: #first
2929
to: #second
3030
weight: #third.
31-
tree := prim run collect: [ :e | e asTuple ].
32-
self assert: tree size equals: 11.
31+
prim run.
32+
resultEdges := prim minimumSpanningTreeEdges collect: [ :e | e asTuple ].
33+
self assert: resultEdges size equals: 11.
3334
self
34-
assert: (tree inject: 0 into: [ :sum :edge | sum + edge third ])
35+
assert: (resultEdges inject: 0 into: [ :sum :edge | sum + edge third ])
3536
equals: 112
3637
]
3738

3839
{ #category : 'tests' }
3940
AIPrimTest >> testMinimumSpanningTreeComplex [
4041

41-
| tree expectedEdges graphType graph |
42+
| resultEdges expectedEdges graphType graph |
4243
graphType := AICyclicWeightedComplexFixture new.
4344
graph :=graphType complexWeightedGraph3.
4445
prim nodes: graph nodes.
@@ -47,20 +48,21 @@ AIPrimTest >> testMinimumSpanningTreeComplex [
4748
from: #first
4849
to: #second
4950
weight: #third.
50-
tree := prim run collect: [ :e | e asTuple ].
51+
prim run.
52+
resultEdges := prim minimumSpanningTreeEdges collect: [ :e | e asTuple ].
5153

5254
expectedEdges := #( #( $a $d 1 ) #( $d $e 1 ) #( $d $b 2 )
5355
#( $e $c 5 ) ).
54-
self assertCollection: tree hasSameElements: expectedEdges.
56+
self assertCollection: resultEdges hasSameElements: expectedEdges.
5557
self
56-
assert: (tree inject: 0 into: [ :sum :edge | sum + edge third ])
58+
assert: (resultEdges inject: 0 into: [ :sum :edge | sum + edge third ])
5759
equals: 9
5860
]
5961

6062
{ #category : 'tests' }
6163
AIPrimTest >> testMinimumSpanningTreeSimple [
6264

63-
| tree expectedEdges graphType graph |
65+
| resultEdges expectedEdges graphType graph |
6466
graphType := AICyclicWeightedSimpleFixture new.
6567
graph :=graphType simpleWeightedGraph2.
6668
prim nodes: graph nodes.
@@ -69,11 +71,12 @@ AIPrimTest >> testMinimumSpanningTreeSimple [
6971
from: #first
7072
to: #second
7173
weight: #third.
72-
tree := prim run collect: [ :e | e asTuple ].
74+
prim run.
75+
resultEdges := prim minimumSpanningTreeEdges collect: [ :e | e asTuple ].
7376

7477
expectedEdges := #( #( 1 2 3 ) #( 2 3 1 ) #( 3 4 2 ) #( 4 5 3 ) ).
75-
self assertCollection: tree hasSameElements: expectedEdges.
78+
self assertCollection: resultEdges hasSameElements: expectedEdges.
7679
self
77-
assert: (tree inject: 0 into: [ :sum :edge | sum + edge third ])
80+
assert: (resultEdges inject: 0 into: [ :sum :edge | sum + edge third ])
7881
equals: 9
7982
]

src/AI-Algorithms-Graph/AIPrim.class.st

+11-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ For more, see: https://en.wikipedia.org/wiki/Prim%27s_algorithm
66
Class {
77
#name : 'AIPrim',
88
#superclass : 'AIGraphAlgorithm',
9+
#instVars : [
10+
'treeEdges'
11+
],
912
#category : 'AI-Algorithms-Graph-Prim',
1013
#package : 'AI-Algorithms-Graph',
1114
#tag : 'Prim'
@@ -35,6 +38,12 @@ AIPrim >> minNode [
3538
^ lowNode
3639
]
3740

41+
{ #category : 'accessing' }
42+
AIPrim >> minimumSpanningTreeEdges [
43+
44+
^ treeEdges
45+
]
46+
3847
{ #category : 'configuration' }
3948
AIPrim >> nodeClass [
4049

@@ -44,7 +53,7 @@ AIPrim >> nodeClass [
4453
{ #category : 'running' }
4554
AIPrim >> run [
4655

47-
| curNode curEdge treeEdges fromNode toNode primEdge |
56+
| curNode curEdge fromNode toNode primEdge |
4857
nodes do: [ :each | each distance: Float infinity ].
4958

5059
treeEdges := OrderedCollection new.
@@ -71,6 +80,5 @@ AIPrim >> run [
7180
& toNode visited not ifTrue: [
7281
toNode previousNode: curNode.
7382
toNode distance: curEdge third ] ] ].
74-
75-
^ treeEdges
83+
7684
]

0 commit comments

Comments
 (0)