Discussione: piccola sfida
View Single Post
Old 21-11-2003, 10:14   #142
a2000
Bannato
 
L'Avatar di a2000
 
Iscritto dal: Jan 2001
Messaggi: 1976
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
a2000 è offline   Rispondi citando il messaggio o parte di esso