亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? network.java

?? 一個Java Applet
?? JAVA
字號:
/* NETWORK */
/* Part of the AntTSP project */
/* Dr Mark C. Sinclair, NPIC, Cambodia, v1.0, November 2006, mcs@ieee.org */
/* You may make use of this code for any purpose, but if you use it, */
/* you must cite the use: Sinclair, M.C., AntTSP Java Applet v1.0, */
/* http://uk.geocities.com/markcsinclair/aco.html, November, 2006 */

import java.util.*;

class Network extends Observable implements Runnable {
	public Network() {
		nodes = new Vector<Node>();
	}

	public synchronized void addNode(Node nd) {
		if (nd == null) throw new NullPointerException("nd is null");
		Contract.require("nd in this Network", nd.getNet() == this);
		Contract.require("nd's id valid", nd.getId() == numNodes());
		Contract.require("not complete", !isComplete());
		nodes.addElement(nd);
		if (numNodes() == 1) {
			adj            = new Vector<Vector<Link>>();
			Vector<Link> v = new Vector<Link>();
			v.addElement(null);
			adj.addElement(v);
		} else {
			int nn = numNodes();
			for (int i=0; i<nn-1; i++)
				adj.elementAt(i).addElement(new Link(getNode(i), nd));
			Vector<Link> v = new Vector<Link>();
			for (int j=0; j<nn-1; j++)
				v.addElement(adj.elementAt(j).lastElement());
			v.addElement(null);
			adj.addElement(v);
		}
	}

	public synchronized void completed() {
		Contract.require("not complete", !isComplete());
		Contract.require("numNodes >= 2", numNodes() >= 2);
		complete = true;

		// Calculate minX, maxX, minY & maxY
		int nn = numNodes();
		maxX = minX = getNode(0).getX();
		maxY = minY = getNode(0).getY();
		for (int nodeId=1; nodeId<nn; nodeId++) {
			double x = getNode(nodeId).getX();
			double y = getNode(nodeId).getY();
			if (x < minX)
				minX = x;
			else if (x > maxX)
				maxX = x;
			if (y < minY)
				minY = y;
			else if (y > maxY)
				maxY = y;
		}
	}

	public synchronized final boolean isComplete() {
		return(complete);
	}

	public synchronized int getNextNodeId() {
		Contract.ensure("nextNodeId correct", nextNodeId == numNodes());
		return(nextNodeId++);
	}

	public synchronized int getNextAntId() {
		Contract.ensure("nextAntId correct", nextAntId == numAnts());
		return(nextAntId++);
	}

	public synchronized int numNodes() {
		return(nodes.size());
	}

	public synchronized Node getNode(int id) {
		Contract.require("id valid", id >= 0 && id < numNodes());
		return((Node)nodes.elementAt(id));
	}

	public synchronized Link getLink(int nodeIdS, int nodeIdT) {
		Contract.require("nodeIdS valid",
				nodeIdS >= 0 && nodeIdS < numNodes());
		Contract.require("nodeIdT valid",
				nodeIdT >= 0 && nodeIdT < numNodes());
		Contract.require("nodeIdS != nodeIdT", nodeIdS != nodeIdT);
		return(adj.elementAt(nodeIdS).elementAt(nodeIdT));
	}

	public synchronized final double getMinX() {
		Contract.require("is complete", isComplete());
		return(minX);
	}

	public synchronized final double getMaxX() {
		Contract.require("is complete", isComplete());
		return(maxX);
	}

	public synchronized final double getMinY() {
		Contract.require("is complete", isComplete());
		return(minY);
	}

	public synchronized final double getMaxY() {
		Contract.require("is complete", isComplete());
		return(maxY);
	}

	public synchronized final int getNumCycles() {
		return(numCycles);
	}

	public synchronized final Node[] getBestTour() {
		Node[] bt = null;
		if (bestTour != null) {
			bt = new Node[bestTour.length];
			System.arraycopy(bestTour, 0, bt, 0, bestTour.length);
		}
		return(bt);
	}

	public synchronized final double getBestTourLen() {
		return(bestTourLen);
	}

	public synchronized final Node[] getBestEverTour() {
		Node[] bet = null;
		if (bestEverTour != null) {
			bet = new Node[bestEverTour.length];
			System.arraycopy(bestEverTour, 0, bet, 0, bestEverTour.length);
		}
		return(bet);
	}

	public synchronized final double getBestEverTourLen() {
		return(bestEverTourLen);
	}

	private synchronized int numAnts() {
		int na = 0;
		Enumeration e = nodes.elements();
		while (e.hasMoreElements())
			na += ((Node)e.nextElement()).numAnts();
		return(na);
	}

	public synchronized void start() {
		if (netThread == null) {
			timeToDie  = false;
			timeToWait = false;
			netThread  = new Thread(this);
			netThread.start();
		}
	}

	public synchronized void suspend() {
		timeToWait = true;
	}

	public synchronized void resume() {
		timeToWait = false;
		notify();
	}

	public synchronized void stop() {
		timeToDie = true;
		notify();
	}

	public void run() {
		placeAnts();

		while (!timeToDie) {
			try {
				synchronized(this) {
					while (timeToWait && !timeToDie)
						wait();
				}
			} catch(InterruptedException e) {
				// do nothing!
			}
			if (timeToDie)
				continue;
			buildTours();
			deposit();
			update();

			synchronized(this) {
				// Best tour
				Ant ba      = bestAnt();
				bestTour    = ba.getTour();
				bestTourLen = ba.getTourLength();

				// Best ever tour
				if ((bestEverTour == null) ||
						(bestTourLen < bestEverTourLen)) {
					bestEverTour    = bestTour;
					bestEverTourLen = bestTourLen;
				}
			}
			resetTabus();
			setChanged();
			notifyObservers(null);
			if (timeToDie)
				continue;
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {
				// do nothing!
			}
			synchronized(this) {
				numCycles++;
			}
		}
	}

	public synchronized void reset() {
		numCycles = 0;
		int nn = numNodes();
		for (int i=0; i<nn; i++) {
			for (int j=i+1; j<nn; j++) {
				Link lnk = adj.elementAt(i).elementAt(j);
				lnk.resetTau();
			}
		}
		bestEverTour    = null;
		bestEverTourLen = 0.0;
		setChanged();
		notifyObservers(null);
	}

	public synchronized void resetBestEverTour() {
		bestEverTour    = null;
		bestEverTourLen = 0.0;
		setChanged();
		notifyObservers(null);
	}

	private synchronized void placeAnts() {
		// place one Ant on each Node
		Contract.require("no Ants yet", numAnts() == 0);
		int    nn  = numNodes();
		Random rnd = new Random(1);
		for (int nodeId=0; nodeId<nn; nodeId++)
			getNode(nodeId).addAnt(new Ant(this, rnd));
	}

	private synchronized void buildTours() {
		Contract.require("some Ants", numAnts() > 0);
		int nn = numNodes();
		for (int step=1; step <= nn; step++) {  // extra step to get Ants
			// back to their first Nodes
			for (int nodeIdS=0; nodeIdS < nn; nodeIdS++) {
				Node nodeS = getNode(nodeIdS);
				// move one Ant at a time
				int na = nodeS.numAnts();
				for (int i=0; i<na; i++) {
					Ant a = nodeS.removeAnt();
					if (!a.allowed()) {
						// Ant a isn't allowed to move
						a.getFirstNode().addAnt(a);
					} else {
						// Move Ant a to chosen destination
						a.chooseNode().addAnt(a);
					}
				}
			}
		}
	}

	private synchronized void deposit() {
		Contract.require("some Ants", numAnts() > 0);
		// require Ants to have completed their tours
		int nn = numNodes();
		for (int nodeId=0; nodeId < nn; nodeId++) {
			Node nd = getNode(nodeId);
			nd.deposit();
		}
	}

	private synchronized void update() {
		Contract.require("some Ants", numAnts() > 0);
		// require Ants to have completed their tours
		// require deposit to have been run
		int nn = numNodes();
		for (int i=0; i<nn; i++) {
			for (int j=i+1; j<nn; j++) {
				Link lnk = adj.elementAt(i).elementAt(j);
				lnk.update();
			}
		}
	}

	private synchronized Ant bestAnt() {
		// best Ant (in terms of their tours)
		Contract.require("some Ants", numAnts() > 0);
		// require Ants to have completed their tours
		int nn = numNodes();
		Ant ba = null;
		for (int nodeId=0; nodeId < nn; nodeId++) {
			Node nd = getNode(nodeId);
			if (nd.numAnts() > 0) {
				Ant a = nd.bestAnt();
				if (ba == null || a.getTourLength() < ba.getTourLength())
					ba = a;
			}
		}
		return(ba);
	}

	private synchronized void resetTabus() {
		Contract.require("some Ants", numAnts() > 0);
		// require Ants to have completed their tours
		// require deposit to have been run
		// require update to have been run
		int nn = numNodes();
		for (int nodeId=0; nodeId < nn; nodeId++)
			getNode(nodeId).resetTabus();
	}

	public synchronized double dist(int nodeIdS, int nodeIdT) {
		Contract.require("nodeIdS valid",
				nodeIdS >= 0 && nodeIdS < numNodes());
		Contract.require("nodeIdT valid",
				nodeIdT >= 0 && nodeIdT < numNodes());
		Contract.require("nodeIdS != nodeIdT", nodeIdS != nodeIdT);
		Node nodeS = getNode(nodeIdS);
		Node nodeT = getNode(nodeIdT);
		double x1  = nodeS.getX();
		double y1  = nodeS.getY();
		double x2  = nodeT.getX();
		double y2  = nodeT.getY();
		double len = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
		Contract.ensure("len >= 0.0", len >= 0.0);
		return(len);
	}

	public synchronized String toString() {
		StringBuffer buf = new StringBuffer();
		buf.append("Network(");
		if (numNodes() > 0) {
			buf.append("nodes:");
			Enumeration e = nodes.elements();
			buf.append(e.nextElement());
			while (e.hasMoreElements())
				buf.append(",\n").append(e.nextElement());
		}
		if (numNodes() > 1) {
			buf.append("\nadj:");
			int nn = numNodes();
			buf.append(adj.elementAt(0).elementAt(1));
			for (int j=2; j<nn; j++) {
				buf.append(",");
				buf.append(adj.elementAt(0).elementAt(j));
			}
			for (int i=1; i<nn-1; i++) {
				buf.append("\n");
				buf.append(adj.elementAt(i).elementAt(i+1));
				for (int j=i+2; j<nn; j++) {
					buf.append(",");
					buf.append(adj.elementAt(i).elementAt(j));
				}
			}
		}
		buf.append(")");
		return(buf.toString());
	}

	private int                  nextNodeId;
	private int                  nextAntId;
	private Vector<Node>         nodes;
	private Vector<Vector<Link>> adj;             // adjacency matrix
	private boolean              complete;
	private int                  numCycles;
	private double               minX;
	private double               maxX;
	private double               minY;
	private double               maxY;
	private Node[]               bestTour;
	private double               bestTourLen;
	private Node[]               bestEverTour;
	private double               bestEverTourLen;
	private Thread               netThread;
	private volatile boolean     timeToDie;
	private volatile boolean     timeToWait;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
1024成人网| 日韩中文字幕麻豆| 日韩欧美在线网站| 波多野结衣亚洲| 捆绑紧缚一区二区三区视频 | www欧美成人18+| 色综合久久99| 国产大陆a不卡| 免费观看在线综合色| 亚洲视频在线观看三级| 精品人在线二区三区| 欧美三级资源在线| 不卡视频一二三| 国产成人av一区二区三区在线| 日韩影院免费视频| 亚洲一二三四在线| 亚洲同性同志一二三专区| 久久久久久久精| 欧美成人一区二区三区片免费 | 97久久人人超碰| 国产精品一二三| 久久99深爱久久99精品| 亚洲va国产天堂va久久en| 亚洲欧美色一区| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美男同性恋视频网站| 色激情天天射综合网| 99精品国产热久久91蜜凸| 粉嫩aⅴ一区二区三区四区五区 | 成人黄色在线视频| 国产91精品精华液一区二区三区 | 欧美性受xxxx黑人xyx性爽| 91色九色蝌蚪| 色一情一伦一子一伦一区| 一本色道久久综合亚洲aⅴ蜜桃| 成人激情文学综合网| 成人h动漫精品一区二区| 懂色av噜噜一区二区三区av| 粉嫩绯色av一区二区在线观看| 国产成人精品影视| 高清国产午夜精品久久久久久| 国产 欧美在线| 99久久99久久综合| 在线亚洲+欧美+日本专区| 欧美视频一区二区三区| 在线成人小视频| 日韩欧美你懂的| 久久精品视频在线免费观看| 中文字幕不卡在线观看| 亚洲欧美电影一区二区| 亚洲一区二区三区美女| 日韩中文字幕1| 精品一区二区在线观看| 国产成人在线看| 91老司机福利 在线| 欧美在线一二三| 91精品婷婷国产综合久久性色| 日韩欧美在线影院| 日本一区二区三区国色天香| 亚洲欧美在线aaa| 亚洲电影第三页| 紧缚奴在线一区二区三区| 国产.精品.日韩.另类.中文.在线.播放| 成人的网站免费观看| 欧美日韩一区二区三区视频| 日韩一级二级三级| 国产精品无遮挡| 亚洲www啪成人一区二区麻豆| 久久精品国产亚洲一区二区三区| 国产传媒久久文化传媒| 色一情一伦一子一伦一区| 欧美精品粉嫩高潮一区二区| 久久天堂av综合合色蜜桃网| 亚洲四区在线观看| 奇米四色…亚洲| 丁香天五香天堂综合| 欧美色老头old∨ideo| 久久久蜜臀国产一区二区| 亚洲另类在线制服丝袜| 喷水一区二区三区| www.久久久久久久久| 这里只有精品99re| 自拍偷拍国产精品| 久久精品国产99久久6| 91麻豆精品秘密| 欧美成人福利视频| 亚洲精品国产无天堂网2021| 麻豆成人av在线| 欧美在线制服丝袜| 国产蜜臀av在线一区二区三区| 天天影视网天天综合色在线播放| 成人综合激情网| 欧美一级高清片在线观看| 中文字幕在线视频一区| 免费成人你懂的| 色播五月激情综合网| 久久一二三国产| 日本一区中文字幕| 色综合久久精品| 国产精品毛片a∨一区二区三区| 天堂精品中文字幕在线| 91在线你懂得| 国产日韩精品一区二区浪潮av| 日本亚洲最大的色成网站www| 色先锋aa成人| **网站欧美大片在线观看| 国产在线播精品第三| 欧美精品久久一区| 亚洲国产日产av| 91久久精品一区二区三区| 国产精品不卡视频| 国产成人精品免费在线| 欧美精品一区二区三区久久久| 亚洲成精国产精品女| 一本久道久久综合中文字幕| 国产精品全国免费观看高清| 狠狠色丁香久久婷婷综合丁香| 91精品国产色综合久久ai换脸| 亚洲综合色丁香婷婷六月图片| 波多野洁衣一区| 国产免费观看久久| 国产suv精品一区二区6| 久久久亚洲精品石原莉奈| 久久成人免费日本黄色| 日韩欧美一级精品久久| 蜜臀久久99精品久久久久久9 | 粉嫩av一区二区三区在线播放| 久久综合九色综合欧美98 | 欧美午夜精品电影| 亚洲人成在线观看一区二区| 99re视频这里只有精品| 中文字幕一区免费在线观看| 不卡av在线免费观看| 国产亚洲成年网址在线观看| 国产一区不卡精品| 国产欧美日韩综合精品一区二区| 国产精品中文有码| 日本一区二区三区高清不卡| 高清不卡在线观看| 亚洲色图制服丝袜| 欧美午夜精品一区二区三区| 日韩在线一区二区三区| 日韩精品一区二区三区老鸭窝| 狠狠色丁香九九婷婷综合五月| 精品日本一线二线三线不卡| 国产一区二区精品久久91| 国产嫩草影院久久久久| 95精品视频在线| 亚洲一区二区欧美日韩 | 欧美一级视频精品观看| 蜜臀av性久久久久av蜜臀妖精| 精品久久久久久久久久久久久久久 | 免费看欧美美女黄的网站| 日韩亚洲国产中文字幕欧美| 狠狠色综合日日| 日本一区二区三区在线不卡| 色婷婷精品久久二区二区蜜臀av| 亚洲一区二区三区影院| 欧美一区二区视频观看视频| 国产河南妇女毛片精品久久久 | 26uuu精品一区二区| 岛国一区二区在线观看| 亚洲一区二区综合| 日韩丝袜情趣美女图片| 成人小视频在线观看| 亚洲精品一二三| 日韩精品一区二区在线观看| 成人午夜伦理影院| 五月综合激情婷婷六月色窝| 亚洲精品一区二区三区蜜桃下载 | 成人动漫一区二区| 亚洲.国产.中文慕字在线| 26uuu久久天堂性欧美| 97久久精品人人做人人爽| 天堂成人免费av电影一区| 日本一区二区三级电影在线观看| 91高清视频在线| 九一久久久久久| 亚洲精品免费一二三区| 337p粉嫩大胆色噜噜噜噜亚洲| 色综合久久久久综合99| 九色综合狠狠综合久久| 一区二区三区在线免费播放| 久久久久久久久久久黄色| 欧美性高清videossexo| 国产精华液一区二区三区| 依依成人精品视频| 国产欧美一区二区精品婷婷| 欧美伦理电影网| jlzzjlzz亚洲女人18| 久久99热这里只有精品| 亚洲午夜私人影院| 国产精品久久久久毛片软件| 欧美一级欧美三级在线观看| 一本大道久久a久久综合婷婷| 久久99精品久久久久久久久久久久 | 久久久www成人免费毛片麻豆| 色偷偷成人一区二区三区91| 国产成人免费在线观看不卡| 亚洲成人免费看|