#include "kollib.h" #include "message.h" #include <iostream> #include <queue> using namespace std; int Id; int szukaj(int p,int k) { if(p==k)return 0; int prawy,lewy,pprawy,plewy; prawy=p; lewy=p; pprawy=p; plewy=p; prawy=FirstNeighbor(p); lewy=SecondNeighbor(p); int odl=1; while(prawy!=k && lewy!=k) { if(FirstNeighbor(prawy)!=pprawy) { pprawy=prawy; prawy=FirstNeighbor(prawy); }else { pprawy=prawy; prawy=SecondNeighbor(prawy); } if(FirstNeighbor(lewy)!=plewy) { plewy=lewy; lewy=FirstNeighbor(lewy); }else { plewy=lewy; lewy=SecondNeighbor(lewy); } odl++; } return odl; } int main() { queue<int> k; int N=NumberOfQueries(); int Id=MyNodeId(); int Nodes=NumberOfNodes(); int Studen=NumberOfStudents(); int odl; for (int i = MyNodeId()+1; i <= N; i += NumberOfNodes()){ odl=szukaj(QueryFrom(i),QueryTo(i)); if(Id==0)k.push(odl); else { PutLL(0,odl); Send(0); } } if(Id==0) { for(int i=0;i<N;i++) { if(i%Nodes==0){ cout << k.front() << "\n"; k.pop(); }else { Receive(i%Nodes); cout << GetInt(i%Nodes) << "\n"; } } return 0; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include "kollib.h" #include "message.h" #include <iostream> #include <queue> using namespace std; int Id; int szukaj(int p,int k) { if(p==k)return 0; int prawy,lewy,pprawy,plewy; prawy=p; lewy=p; pprawy=p; plewy=p; prawy=FirstNeighbor(p); lewy=SecondNeighbor(p); int odl=1; while(prawy!=k && lewy!=k) { if(FirstNeighbor(prawy)!=pprawy) { pprawy=prawy; prawy=FirstNeighbor(prawy); }else { pprawy=prawy; prawy=SecondNeighbor(prawy); } if(FirstNeighbor(lewy)!=plewy) { plewy=lewy; lewy=FirstNeighbor(lewy); }else { plewy=lewy; lewy=SecondNeighbor(lewy); } odl++; } return odl; } int main() { queue<int> k; int N=NumberOfQueries(); int Id=MyNodeId(); int Nodes=NumberOfNodes(); int Studen=NumberOfStudents(); int odl; for (int i = MyNodeId()+1; i <= N; i += NumberOfNodes()){ odl=szukaj(QueryFrom(i),QueryTo(i)); if(Id==0)k.push(odl); else { PutLL(0,odl); Send(0); } } if(Id==0) { for(int i=0;i<N;i++) { if(i%Nodes==0){ cout << k.front() << "\n"; k.pop(); }else { Receive(i%Nodes); cout << GetInt(i%Nodes) << "\n"; } } return 0; } return 0; } |