Quote:
Originariamente inviato da a2000
comunque tornando a bomba, nuovo record:
4000 x 4000 in 5.2 secondi !!!
|
con questo:
Codice:
Program Quadrante
Parameter (iMax = 4000, jMax = 4000)
Integer(1), allocatable :: v( : , : )
Integer(1) vMin, h, Di(1 : 8), Dj(1 : 8)
Real(8) tm0, Dtm
Allocate (v(-2 : iMax + 3, -2 : jMax + 3))
Di(1) = 3; Dj(2) = 3; Dj(3) = -3; Di(4) = -3
Di(5) = 2; Dj(5) = 2
Di(6) = 2; Dj(6) = -2
Di(7) = -2; Dj(7) = 2
Di(8) = -2; Dj(8) = -2
!orlatura
v = 0
Do i = 1, Int(0.5 * iMax + 1); Do j = 1, Int(0.5 * jMax + 1)
v(i, j) = 9 - (8 + (j < 4) + 2 * (j < 3) + (i < 4) + 2 * (i < 3) + (j < 3) * (i < 3))
v(iMax + 1 - i, j) = v(i, j); v(i, jMax + 1 - j) = v(i, j); v(iMax + 1 - i, jMax + 1 - j) = v(i, j)
End Do; End Do
i = 1; j = 1
Do k = 1, iMax * jMax
v(i, j) = -hMin
vMin = -100
Do h = 1, 8
ih = i + Di(h); jh = j + Dj(h)
v(ih, jh) = v(ih, jh) - (v(ih, jh) > 0)
If (v(ih, jh) > vMin) Then
vMin = v(ih, jh); hMin = h
End If
End Do
If (vMin < 1) Exit
i = i + Di(hMin); j = j + Dj(hMin)
End Do
End Program