⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rumor.java

📁 用java语言仿真传感器网络中的谣传算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -