Professional Documents
Culture Documents
h>
#include<stdio.h>
#include<math.h>
#define PI
#define R3
3.14159265
1.73205080
node[i].o_pt[0][0] = pt_deploy[0][1];
node[i].o_pt[0][1] = pt_deploy[0][1];
node[i].status = 'f';
node[i].slave_count = 0;
node[i].vp_count = 6;
l=0;
for(k=0;k<6;k++)
{
node[i].G[k] = -1;
node[i].VP[k] = l++;
}
}
for(i=0; i<n; i++)
{
j=0;
for (k=0;k<n;k++)
{
if ((node[i].pt[0][0]+2>node[j].pt[0][0])
&&(node[i].pt[0][1]+2>node[j].pt[0][1])&&(node[i].id != node[j].id))
{
node[i].L[k] = node[j].id;
}
else
node[i].L[k] = -1;
j++;
node[i].S[k] = -1;
}
}
i=0;
while(i<n)
{
if (node[i].id == s_init)
{
node[i].status = 'S';
break;
}
i++;
}
neighbor_discovery(node[i], n, node);
j=0;
for(k=0;k<n;k++)
{
if(node[s_init].VP[j] != -1)
{
if (node[s_init].L[k] != -1)
{
s=0;
for(i=k;i>0;i--)
s += (i*6);
s+=1;
if (s==n)
msg_count += (2*pow(k,2)*(k*6));
else
{
j=0;
j = (k*6)-(s-n);
msg_count += (2*pow(k,2)*j);
}
}
for(j=0;j<n;j++)
neighbor_discovery(node[j],n,node);
fprintf(ff,"X =");
for(j=0;j<n;j++)
fprintf(ff,"
%f", node[j].o_pt[0][0]);
fprintf(ff,"\n\nY =");
for(j=0;j<n;j++)
fprintf(ff,"
%f", node[j].o_pt[0][1]);
fprintf(fp,"\n\tThere are %d levels for %d sensors.\n", no_lev, n);
fprintf(fp,"\n\tNumber of messages passed is %d.\n", msg_count);
fclose(fp);
fclose(ff);
return 0;
}
int req(int parent, int child, int n, sensor node[n])
{
int p,j=0,x;
if(mov_cond(child, node[child].slave_count, node[parent]))
{
x = s_push(parent, child, n, node);
if(t==x)
return 1;
else
{
j=0;
while(j<6)
{
p = node[t].G[j];
if(p==-1)
j++;
else
break;
}
if (p!=-1)
return (req(p, t, n, node));
}
}
else
{
j=0;
while(j<6)
{
p = node[parent].G[j];
if(p==-1)
j++;
else
break;
}
if (p!=-1)
return (req(p, parent, n, node));
}
}
void neighbor_discovery (sensor s, int n, sensor node[n])
{
int i,j,k=0,l=0;
for(i=0;i<n;i++)
{
if((node[i].pt[0][0]<s.pt[0][0]+2)&&(node[i].pt[0][1]<s.pt[0][1]+2)
&&(node[i].id!=s.id)&&(node[i].status!='S')&&(node[i].status!='s'))
{
node[s.id].S[k] = node[i].id;
node[s.id].slave_count++;
node[i].status ='s';
k++;
}
if((node[i].pt[0][0]<=s.pt[0][0]+2)&&(node[i].pt[0][1]<=s.pt[0][1]+1)
&&(node[i].id!=s.id)&&(node[i].status=='S')&&(node[i].pt[0][0]>=s.pt[0][0]-2)
&&(node[i].pt[0][1]>=s.pt[0][1]-1)&&(s.status=='S'))
{
node[s.id].G[l] = node[i].id;
l++;
}
if ((node[i].id != s.id) && (node[i].status == 'S') && (s.vp_count > 0)
&& (s.vp_count < 7) && (s.status == 'S'))
{
if((node[i].pt[0][0] == s.pt[0][0]+2 && node[i].pt[0][1] == s.pt[0][1])
&&(node[s.id].VP[0]!=-1))
{
node[s.id].vp_count--;
node[s.id].VP[0]=-1;
}
if((node[i].pt[0][0] == s.pt[0][0]+1
&&(node[s.id].VP[1]!=-1))
{
node[s.id].vp_count--;
node[s.id].VP[1]=-1;
}
if((node[i].pt[0][0] == s.pt[0][0]-1
&&(node[s.id].VP[2]!=-1))
{
node[s.id].vp_count--;
node[s.id].VP[2]=-1;
}
if((node[i].pt[0][0] == s.pt[0][0]-2
&&(node[s.id].VP[3]!=-1))
{
node[s.id].vp_count--;
node[s.id].VP[3]=-1;
}
if((node[i].pt[0][0] == s.pt[0][0]-1
&&(node[s.id].VP[4]!=-1))
{
node[s.id].vp_count--;
node[s.id].VP[4]=-1;
}
if((node[i].pt[0][0] == s.pt[0][0]+1
&&(node[s.id].VP[5]!=-1))
{
node[s.id].vp_count--;
node[s.id].VP[5]=-1;
}
}
}
}
void snap(int s, int j, int i, int n, sensor node[n])
{
int k;
if (node[i].status == 's')
{
node[i].pt[0][0] = round(node[s].pt[0][0] + (R3
node[i].pt[0][1] = round(node[s].pt[0][1] + (R3
node[i].o_pt[0][0] = node[s].o_pt[0][0] + (R3 *
node[i].o_pt[0][1] = node[s].o_pt[0][1] + (R3 *
node[i].status = 'S';
for (k=0; k<n; k++)
{
if(node[s].S[k] == node[i].id)
* cos(j*(PI/3))));
* sin(j*(PI/3))));
cos(j*(PI/3)));
sin(j*(PI/3)));
{
node[s].S[k] = -1;
node[s].slave_count--;
}
}
}
}
int mov_cond(int id_y, int Sy, sensor x)
{
if((x.status=='S') && (x.slave_count>0))
return 1;
else
return 0;
}
int s_push(int s, int id_y, int n, sensor node[n])
{
int i,k;
k = node[id_y].slave_count;
for(i=0;i<n;i++)
if (node[s].S[i] != -1)
break;
if(node[node[s].S[i]].status == 's')
{
node[node[s].S[i]].pt[0][0] = node[id_y].pt[0][0];
node[node[s].S[i]].pt[0][1] = node[id_y].pt[0][1];
node[id_y].slave_count++;
node[id_y].S[k] = node[s].S[i];
node[s].S[i] = -1;
node[s].slave_count--;
}
return (node[id_y].id);
}
int solve(int n)
{
int x=1,i=1,count=0;
while(x<n)
{
x=x+(6*i);
if (x<=n)
count++;
i++;
}
return (count);
}