Advertisement
Guest User

Untitled

a guest
Jan 5th, 2015
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. class CPM
  2. attr_accessor :l,:id,:odwiedzony,:numerTopologiczny, :czasWykonania,:nastepniki,:poprzedniki
  3. def initialize(identification,czasWyk)
  4. @odwiedzony=false
  5. @numerTopologiczny=-1
  6. @nastepniki= Array.new()
  7. @poprzedniki=Array.new()
  8. @id=identification
  9. @czasWykonania=czasWyk
  10. @l=nil
  11. end
  12. end
  13.  
  14.  
  15. lista = Array.new
  16.  
  17. def dodaj_punkt(list,id,czasWykonania)
  18. if(list.select{ |x| x.id == id}.length != 1 )
  19. #puts "id + #{list.select{ |x| x.id == id}.length}"
  20. #print " print #{id} "
  21. list.push(CPM.new(id,czasWykonania))
  22. end
  23. end
  24.  
  25. def znajdzNajwiekszeL(list)
  26. najdluzszaSciezka = CPM.new()
  27. najdluzszaSciezka=list[0]
  28. list.each { |x|
  29. if (x.l + x.czasWykonania > najdluzszaSciezka.l+najdluzszaSciezka.czasWykonania)
  30. najdluzszaSciezka=x
  31. end
  32. }
  33.  
  34. return najdluzszaSciezka.l+najdluzszaSciezka.czasWykonania
  35. end
  36.  
  37. def policzMomentUruchomienia(list)
  38. list.each { |x|
  39. if x.poprzedniki.size == 0
  40. x.l =0
  41. end
  42. }
  43.  
  44. for i in 1..list.size
  45. tmp = list.find { |x| x.numerTopologiczny == i }
  46. if tmp.poprzedniki.length == 0
  47. tmp.l=0
  48. tmp.czasUkonczenia=tmp.l+tmp.czasWykonania
  49. else
  50. tmp.l=znajdzNajwiekszeL(tmp.poprzedniki)
  51. tmp.czasUkonczenia = tmp.l+tmp.czasWykonania
  52. end
  53. end
  54. end
  55.  
  56.  
  57. def Dodaj_Sciezke(list,id,poprzednikID)
  58. if(list.select{ |x| x.id == id}.length == 1 && list.select{ |x| x.id == poprzednikID}.length == 1)
  59. if(czyJestZawartyWPoprzednikach(list.select{ |x| x.id == id}.poprzedniki,poprzednikID) >= 1)
  60. raise "BLAD CYKLICZNOSC !"
  61. else
  62. list.select{ |x| x.id == id}.poprzedniki.push(list.select{ |x| x.id == poprzednikID})
  63. list.select{ |x| x.id == poprzednikID}.nastepniki.push(list.select{ |x| x.id == id})
  64. end
  65.  
  66. end
  67. end
  68.  
  69. def czyJestZawartyWPoprzednikach(list,id)
  70.  
  71. tmp = 0;
  72.  
  73. list.each_index { |x|
  74. if(x.poprzedniki.length != 0) then czyJestZawartyWPoprzednikach(list,id) end;
  75. if(x.id == id) then tmp += 1 end;
  76. }
  77. return tmp
  78. end
  79.  
  80. def czyJestZawartyWPoprzednikach(list,id)
  81. tmp=0
  82. list.each { |x|
  83. if x.poprzedniki.length !=0
  84. czyJestZawartyWPoprzednikach(x.poprzedniki,id)
  85. end
  86. if(x.id == id)
  87. tmp+=1
  88. end
  89. }
  90. return tmp
  91. end
  92.  
  93. dodaj_punkt(lista,1,5)
  94. dodaj_punkt(lista,2,5)
  95. dodaj_punkt(lista,1,5)
  96. dodaj_punkt(lista,1,5)
  97. dodaj_punkt(lista,3,5)
  98. dodaj_punkt(lista,3,4)
  99. dodaj_punkt(lista,4,2)
  100. dodaj_punkt(lista,1,3)
  101. Dodaj_Sciezke(lista,4,2)
  102. lista.each { |x| puts "#{x.id} , #{x.czasWykonania}" }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement