Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class CPM
- attr_accessor :l,:id,:odwiedzony,:numerTopologiczny, :czasWykonania,:nastepniki,:poprzedniki
- def initialize(identification,czasWyk)
- @odwiedzony=false
- @numerTopologiczny=-1
- @nastepniki= Array.new()
- @poprzedniki=Array.new()
- @id=identification
- @czasWykonania=czasWyk
- @l=nil
- end
- end
- lista = Array.new
- def dodaj_punkt(list,id,czasWykonania)
- if(list.select{ |x| x.id == id}.length != 1 )
- #puts "id + #{list.select{ |x| x.id == id}.length}"
- #print " print #{id} "
- list.push(CPM.new(id,czasWykonania))
- end
- end
- def znajdzNajwiekszeL(list)
- najdluzszaSciezka = CPM.new()
- najdluzszaSciezka=list[0]
- list.each { |x|
- if (x.l + x.czasWykonania > najdluzszaSciezka.l+najdluzszaSciezka.czasWykonania)
- najdluzszaSciezka=x
- end
- }
- return najdluzszaSciezka.l+najdluzszaSciezka.czasWykonania
- end
- def policzMomentUruchomienia(list)
- list.each { |x|
- if x.poprzedniki.size == 0
- x.l =0
- end
- }
- for i in 1..list.size
- tmp = list.find { |x| x.numerTopologiczny == i }
- if tmp.poprzedniki.length == 0
- tmp.l=0
- tmp.czasUkonczenia=tmp.l+tmp.czasWykonania
- else
- tmp.l=znajdzNajwiekszeL(tmp.poprzedniki)
- tmp.czasUkonczenia = tmp.l+tmp.czasWykonania
- end
- end
- end
- def Dodaj_Sciezke(list,id,poprzednikID)
- if(list.select{ |x| x.id == id}.length == 1 && list.select{ |x| x.id == poprzednikID}.length == 1)
- if(czyJestZawartyWPoprzednikach(list.select{ |x| x.id == id}.poprzedniki,poprzednikID) >= 1)
- raise "BLAD CYKLICZNOSC !"
- else
- list.select{ |x| x.id == id}.poprzedniki.push(list.select{ |x| x.id == poprzednikID})
- list.select{ |x| x.id == poprzednikID}.nastepniki.push(list.select{ |x| x.id == id})
- end
- end
- end
- def czyJestZawartyWPoprzednikach(list,id)
- tmp = 0;
- list.each_index { |x|
- if(x.poprzedniki.length != 0) then czyJestZawartyWPoprzednikach(list,id) end;
- if(x.id == id) then tmp += 1 end;
- }
- return tmp
- end
- def czyJestZawartyWPoprzednikach(list,id)
- tmp=0
- list.each { |x|
- if x.poprzedniki.length !=0
- czyJestZawartyWPoprzednikach(x.poprzedniki,id)
- end
- if(x.id == id)
- tmp+=1
- end
- }
- return tmp
- end
- dodaj_punkt(lista,1,5)
- dodaj_punkt(lista,2,5)
- dodaj_punkt(lista,1,5)
- dodaj_punkt(lista,1,5)
- dodaj_punkt(lista,3,5)
- dodaj_punkt(lista,3,4)
- dodaj_punkt(lista,4,2)
- dodaj_punkt(lista,1,3)
- Dodaj_Sciezke(lista,4,2)
- lista.each { |x| puts "#{x.id} , #{x.czasWykonania}" }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement