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

📄 node.java

📁 能在 ns-2 下模拟出一个使用 swarm 算法通讯的网络
💻 JAVA
字号:
/******************************************************************************* ** BonnMotion - a mobility scenario generation and analysis tool             ** ** Copyright (C) 2002, 2003 University of Bonn                               ** **                                                                           ** ** This program is free software; you can redistribute it and/or modify      ** ** it under the terms of the GNU General Public License as published by      ** ** the Free Software Foundation; either version 2 of the License, or         ** ** (at your option) any later version.                                       ** **                                                                           ** ** This program is distributed in the hope that it will be useful,           ** ** but WITHOUT ANY WARRANTY; without even the implied warranty of            ** ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             ** ** GNU General Public License for more details.                              ** **                                                                           ** ** You should have received a copy of the GNU General Public License         ** ** along with this program; if not, write to the Free Software               ** ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA ** *******************************************************************************/package edu.bonn.cs.iv.graph;import edu.bonn.cs.iv.util.*;/** This class implements a node. */public class Node implements Sortable {	/** Node ID. */	public final int id;		/** List with outgoing edges. */	protected EdgeList succList = new EdgeList(false);		/** List with incoming edges. */	protected EdgeList predList = new EdgeList(true);		/** Graph to which this nodes belongs. */	protected Graph graph;	/** Used to generate node IDs. */	protected static int idCount;		/** Generate a hopefully unused node ID, must still be checked though. */	public static int nextID() {		return (0x00000100 | (idCount++));	}	/** Create a "stand-alone" node not belonging to any graph (yet). */	public Node(int id) {		this.id = id;		graph = null;	}	/** Create a node that belongs to a graph. */	public Node(Graph g) {		int id;		while (g.getNode(id = nextID()) != null);		this.id = id;		graph = g;		g.addNode(this);	}	/** Create a node with a specified ID belonging to a graph. */	public Node(int id, Graph g) {		this.id = id;		graph = g;		g.addNode(this);	}	/** Add an outgoing edge. * 	@param succ Destination node. * 	@param weight Edge weight. * 	@return Edge added. */	public Edge addSucc(Node succ, int weight) {		Edge e = new Edge(this, succ, weight);		if (succList.add(e) == -1)			throw new RuntimeException("edge " + e.srcNode() + " -> " + e.dstNode() + " already exists!");		succ.predList.add(e);		return e;	}	/** Change edge weight. * 	@param succ Destination node. * 	@param delta Value to be added to edge weight. */	public void adjustWeight(Node succ, int delta) {		Edge e = succList.get(succ.getKey());		if (e == null)			addSucc(succ, delta);		else {    		e.weight += delta;    		if (e.weight == 0)	    		delSucc(succ.getKey());		}	}	/** Retrieve an outgoing link. * 	@param succID ID of destination node. * 	@return Sought edge or null, if non-existent. */	public Edge getSucc(int succID) {		return succList.get(succID);	}	/** Get weight of an outgoing edge. * 	@param succID ID of destination node. * 	@return Edge's weight or 0, if non-existent. */	public int getSuccWeight(int succID) {		Edge e = succList.get(succID);		if (e == null)			return 0;		else			return e.weight;	}	/** Remove an outgoing edge. * 	@param succID ID of destination node. * 	@return Removed edge or null, if non-existent. */	public Edge delSucc(int succID) {		Edge e = succList.delete(succID);		if (e != null)			e.dstNode().predList.delete(id);		return e;	}	/** Number of outgoing edges. */	public int outDeg() {		return succList.size();	}	/** Get outgoing edge at certain position in internal list. * 	@param pos Position in the internal list. * 	@return Sought edge. */	public Edge succAt(int pos) {		return succList.elementAt(pos);	}	/** Remove outgoing edge at certain position in internal list. * 	@param pos Position in the internal list. * 	@return Removed edge. */	public Edge delSuccAt(int pos)  {        Edge e = succList.deleteElementAt(pos);        e.dstNode().predList.delete(id);        return e;	}	/** Number of incoming edges. */	public int inDeg() {		return predList.size();	}		/** Get outgoing edge at certain position in internal list. * 	@param pos Position in the internal list. * 	@return Sought edge. */	public Edge predAt(int pos) {		return predList.elementAt(pos);	}	/** Remove outgoing edge at certain position in internal list. * 	@param pos Position in the internal list. * 	@return Removed edge. */	public Edge delPredAt(int pos)  {		Edge e = predList.deleteElementAt(pos);        e.srcNode().succList.delete(id);        return e;	}	/** Get this node's home graph. */	public Graph homeGraph() {		return graph;	}		/** Remove this node from its graph. Cooperates with Graph.delNode. */	public void removeFromGraph() {		if (graph != null) {			int end;			while ((end = outDeg()) > 0)				delSuccAt(end - 1);			while ((end = inDeg()) > 0)				delPredAt(end - 1);			if (graph.getNode(id) != null)				graph.delNode(this);			else				graph = null;		}	}	/** Add this node to a graph. Cooperates with Graph.addNode. */	public boolean addToGraph(Graph g) {		if (graph == null) {			graph = g;			if (g.getNode(id) == null)				g.addNode(this);			return true;		}		else			return false;	}	/** Get the node ID. */	public int getKey() {		return id;	}		/** Get the node ID. */	public String toString() {		return String.valueOf(id);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -