📄 rumor.java
字号:
import java.awt.*;
import java.awt.event.*;
class InterstThing
{
//Attributions
String StrName;
int ioldTime;
int iFromNode;
int iSelfNode;
int iToNode;
int iStep;
//keep the number of neighbor has been visited
//1111---all neighbor has been visited
//1110---the 0st,1st and 2st has been visited
//0000---there is no neighbor has been visited
//but infact i didn't do so
int iVisitNode;
String strFromWho;
static boolean bFinish;
InterstThing(String StrName)
{
this.StrName = StrName;
this.ioldTime = 1000;
this.iFromNode = 0;
this.iSelfNode = 0;
this.iToNode = 49;
this.iStep = 50;
this.strFromWho = new String("NoPass");
this.iVisitNode = 0;
//每次调用构造函数,全局的bFinish都会改变啊。。。
this.bFinish = false;
}
InterstThing(InterstThing CInterstThing)
{
this.StrName = CInterstThing.StrName;
this.ioldTime = CInterstThing.ioldTime;
this.iFromNode = CInterstThing.iFromNode;
this.iSelfNode = CInterstThing.iSelfNode;
this.iToNode = CInterstThing.iToNode;
this.iStep = CInterstThing.iStep;
this.strFromWho = CInterstThing.strFromWho;
this.bFinish = CInterstThing.bFinish;
}
}
class SensorNode
{
//Attributions
int iX_position;
int iY_position;
int iSize = 5;
int [] neighbors = {0,0,0,0,0,0};
InterstThing [] CInterstThings = new InterstThing[5];
String strName;
//Motheds
SensorNode(String strName)
{
this.strName = strName;
CInterstThings[0] = new InterstThing(strName);
}
/* SensorNode(SensorNode [] sensorNodes)
{
findNeighborNode(sensorNodes);
strName = "sensorNode";
}
*/
void findNeighborNode(SensorNode [] sensorNodes)
{
int i =0,j = 0;
long lMaxDistance = 222800;
long []iDistance =new long[51];
for(j = 0;j<=50;j++)
{
for(i = 0;i<=50;i++)
{
iDistance[i] = getDistance(sensorNodes[j], sensorNodes[i]);
}
//find the 6 shortest distance nodes
//to stupid way,use "for" Loop please
long temp = lMaxDistance;
int iNeighborNum = 0;
/*
//the first node
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[0] = i;
}
}
iDistance[sensorNodes[j].neighbors[0]] = 0;
//the second node
temp = lMaxDistance;
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[1] = i;
}
}
iDistance[sensorNodes[j].neighbors[1]] = 0;
//the third node
temp = lMaxDistance;
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[2] = i;
}
}
iDistance[sensorNodes[j].neighbors[2]] = 0;
//the forth node
temp = lMaxDistance;
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[3] = i;
}
}
iDistance[sensorNodes[j].neighbors[3]] = 0;
//the fifth
temp = lMaxDistance;
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[4] = i;
}
}
iDistance[sensorNodes[j].neighbors[4]] = 0;
//the sixth node
temp = lMaxDistance;
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[5] = i;
}
}
iDistance[sensorNodes[j].neighbors[5]] = 0;
*/
//smart way ,use loop way
for(iNeighborNum = 0;iNeighborNum<=5;iNeighborNum++)
{
temp = lMaxDistance;
for(i = 0;i<=50;i++)
{
if((temp>iDistance[i])&&(iDistance[i]!=0))
{
temp = iDistance[i];
sensorNodes[j].neighbors[iNeighborNum] = i;
}
}
iDistance[sensorNodes[j].neighbors[iNeighborNum]] = 0;
}
//for debug
/*
if(j==50){
System.out.println(sensorNodes[j].neighbors[0]);
System.out.println(sensorNodes[j].neighbors[1]);
System.out.println(sensorNodes[j].neighbors[2]);
System.out.println(sensorNodes[j].neighbors[3]);
}
*/
}
}
long getDistance(SensorNode src,SensorNode dst)
{
return ((src.iX_position-dst.iX_position)*(src.iX_position-dst.iX_position) + (src.iY_position-dst.iY_position)*(src.iY_position-dst.iY_position));
}
/*****************************************************/
/**函数名称:SendMsg */
/**用途 : 发送rumor消息 */
/**返回值: 为节点序号 */
/**说明: 产生iToNodeNumber并更新此数值*/
/*****************************************************/
int SendMsg(InterstThing CInterstThing,int iSelfNode)
{
int iReturnNode = 0;
int iIndex =0;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0] = new InterstThing(CInterstThing);
/*
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iSelfNode = iSelfNode;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].strFromWho = strFromWho;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].ioldTime = CInterstThing.ioldTime;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iStep = CInterstThing.iStep;
*/
iIndex = (int)(Math.random()*10%6);
if(SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iVisitNode == 0)
{
iReturnNode = SensorNet.sensorNodes[iSelfNode].neighbors[iIndex];
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iVisitNode = iIndex;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iToNode = iReturnNode;
return iReturnNode;
}
else if(SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iVisitNode == iIndex)
{
iIndex = (int)((iIndex + (int)(Math.random()*10%6))%6);
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iVisitNode = iIndex;
iReturnNode = SensorNet.sensorNodes[iSelfNode].neighbors[iIndex];
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iToNode = iReturnNode;
return iReturnNode;
}
//for debug
// System.out.println(iReturnNode);
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iToNode = iReturnNode;
iReturnNode = SensorNet.sensorNodes[iSelfNode].neighbors[iIndex];
return iReturnNode;
}
/*****************************************************/
/**函数名称:GotMsg */
/**用途 : 接收rumor消息 */
/**返回值: void */
/**说明: 当为普通点时更新iFromNode,当为交叉点时更新交叉点的iToNodeNumber */
/* 更新iselfNodeNumber*/
/*****************************************************/
void GotMsg(InterstThing CInterstThing,int iSelfNode)
{
if((SensorNet.sensorNodes[iSelfNode].CInterstThings[0].strFromWho.equals("fromSink")&&CInterstThing.strFromWho.equals("fromSensorNode"))
||(SensorNet.sensorNodes[iSelfNode].CInterstThings[0].strFromWho.equals("fromSensorNode")&&CInterstThing.strFromWho.equals("fromSink")))
{
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iToNode = CInterstThing.iSelfNode;
InterstThing.bFinish = true;
return;
}
else if(SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iStep<CInterstThing.iStep)
{
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].ioldTime = CInterstThing.ioldTime - 1;
return;
}
SensorNet.sensorNodes[iSelfNode].CInterstThings[0] = new InterstThing(CInterstThing.StrName);
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iFromNode = CInterstThing.iSelfNode;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].ioldTime = CInterstThing.ioldTime - 1;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iStep = CInterstThing.iStep + 1;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].strFromWho = CInterstThing.strFromWho;
SensorNet.sensorNodes[iSelfNode].CInterstThings[0].iSelfNode = iSelfNode;
}
}
class SensorNet extends Canvas
{
//Attributions
static int iNodeNumber = 51;
static SensorNode sensorNodes[] = new SensorNode[iNodeNumber];
static SensorNode sinkNode = new SensorNode("sinkNode");
//Methods
SensorNet()
{
super.setSize(800,400);
super.setVisible(true);
//Generate THe Sensor Net, Fix The Node Positions.
GenerateNet();
//for debug
//System.out.println("going to FindRoute");
FindRoute(sensorNodes,"tempiture");
repaint();
}
void reGenerate()
{
super.setSize(800,400);
super.setVisible(true);
//Generate THe Sensor Net, Fix The Node Positions.
GenerateNet();
//for debug
//System.out.println("going to FindRoute");
FindRoute(sensorNodes,"tempiture");
repaint();
}
void GenerateNet()
{
int i;
//generate sink
sinkNode = new SensorNode("sinkNode");
sinkNode.iX_position = 50;
sinkNode.iY_position = 50;
sinkNode.iSize = 8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -