#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; } |
English