Data update
This commit is contained in:
parent
52a6ef48dd
commit
157b70a810
604 changed files with 14253 additions and 2100 deletions
|
|
@ -0,0 +1,127 @@
|
|||
Const NROWS = 4, NCOLS = 5
|
||||
Const MAX_INT = &h7FFFFFFF
|
||||
|
||||
Dim Shared As Integer supply(NROWS-1) = {50, 60, 50, 50}
|
||||
Dim Shared As Integer demand(NCOLS-1) = {30, 20, 70, 30, 60}
|
||||
Dim Shared As Integer costs(NROWS-1, NCOLS-1), results(NROWS-1, NCOLS-1)
|
||||
Dim Shared As Boolean rowDone(NROWS-1), colDone(NCOLS-1)
|
||||
|
||||
Sub calcDiff(j As Integer, l As Integer, isRow As Boolean, diff() As Integer)
|
||||
Dim As Integer min1 = MAX_INT, min2 = MAX_INT, minP = -1
|
||||
|
||||
For i As Integer = 0 To l-1
|
||||
Dim As Boolean done = Iif(isRow, colDone(i), rowDone(i))
|
||||
|
||||
If done Then Continue For
|
||||
|
||||
Dim As Integer c = Iif(isRow, costs(j, i), costs(i, j))
|
||||
|
||||
If c < min1 Then
|
||||
min2 = min1
|
||||
min1 = c
|
||||
minP = i
|
||||
Elseif c < min2 Then
|
||||
min2 = c
|
||||
End If
|
||||
Next
|
||||
|
||||
diff(0) = min2 - min1
|
||||
diff(1) = min1
|
||||
diff(2) = minP
|
||||
End Sub
|
||||
|
||||
Sub maxPenalty(len1 As Integer, len2 As Integer, isRow As Boolean, result() As Integer)
|
||||
Dim As Integer md = -MAX_INT
|
||||
Dim As Integer pc = -1, pm = -1, mc = -1
|
||||
Dim As Integer diff(2)
|
||||
|
||||
For i As Integer = 0 To len1-1
|
||||
Dim As Boolean done = Iif(isRow, rowDone(i), colDone(i))
|
||||
|
||||
If done Then Continue For
|
||||
|
||||
calcDiff(i, len2, isRow, diff())
|
||||
If diff(0) > md Then
|
||||
md = diff(0)
|
||||
pm = i
|
||||
mc = diff(1)
|
||||
pc = diff(2)
|
||||
End If
|
||||
Next
|
||||
|
||||
If isRow Then
|
||||
result(0) = pm : result(1) = pc : result(2) = mc : result(3) = md
|
||||
Else
|
||||
result(0) = pc : result(1) = pm : result(2) = mc : result(3) = md
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Sub nextCell(cell() As Integer)
|
||||
Dim As Integer i, res1(3), res2(3)
|
||||
|
||||
maxPenalty(NROWS, NCOLS, True, res1())
|
||||
maxPenalty(NCOLS, NROWS, False, res2())
|
||||
|
||||
If res1(3) = res2(3) Then
|
||||
If res1(2) < res2(2) Then
|
||||
For i = 0 To 3
|
||||
cell(i) = res1(i)
|
||||
Next
|
||||
Else
|
||||
For i = 0 To 3
|
||||
cell(i) = res2(i)
|
||||
Next
|
||||
End If
|
||||
Elseif res1(3) > res2(3) Then
|
||||
For i = 0 To 3
|
||||
cell(i) = res2(i)
|
||||
Next
|
||||
Else
|
||||
For i = 0 To 3
|
||||
cell(i) = res1(i)
|
||||
Next
|
||||
End If
|
||||
End Sub
|
||||
|
||||
' Main program
|
||||
costs(0,0)=16 : costs(0,1)=16 : costs(0,2)=13 : costs(0,3)=22 : costs(0,4)=17
|
||||
costs(1,0)=14 : costs(1,1)=14 : costs(1,2)=13 : costs(1,3)=19 : costs(1,4)=15
|
||||
costs(2,0)=19 : costs(2,1)=19 : costs(2,2)=20 : costs(2,3)=23 : costs(2,4)=50
|
||||
costs(3,0)=50 : costs(3,1)=12 : costs(3,2)=50 : costs(3,3)=15 : costs(3,4)=11
|
||||
|
||||
Dim As Integer i, j, supplyLeft = 0
|
||||
For i = 0 To NROWS-1
|
||||
supplyLeft += supply(i)
|
||||
Next
|
||||
|
||||
Dim As Integer totalCost = 0
|
||||
Dim As Integer cell(3)
|
||||
|
||||
While supplyLeft > 0
|
||||
nextCell(cell())
|
||||
Dim As Integer r = cell(0), c = cell(1), q = demand(c)
|
||||
If q > supply(r) Then q = supply(r)
|
||||
|
||||
demand(c) -= q
|
||||
If demand(c) = 0 Then colDone(c) = True
|
||||
|
||||
supply(r) -= q
|
||||
If supply(r) = 0 Then rowDone(r) = True
|
||||
|
||||
results(r, c) = q
|
||||
supplyLeft -= q
|
||||
totalCost += q * costs(r, c)
|
||||
Wend
|
||||
|
||||
Print " A B C D E"
|
||||
For i = 0 To NROWS-1
|
||||
Print Chr(Asc("W") + i);
|
||||
For j = 0 To NCOLS-1
|
||||
Print Using " ##"; results(i, j);
|
||||
Next
|
||||
Print
|
||||
Next
|
||||
|
||||
Print !"\nTotal cost = "; totalCost
|
||||
|
||||
Sleep
|
||||
Loading…
Add table
Add a link
Reference in a new issue