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

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

?? pathfinder.java

?? a java game code for java
?? JAVA
字號:
package eatbean.util.algorithm;/** * <p>Title: A*算法找最短路徑</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: Raindrop</p> * @author "nothing" * @version 1.0 */import eatbean.Room;public class PathFinder {	private final int MIN = -9999;	private final int MAX = 9999;	private Link open = new Link();	private Link closed = new Link();	private int[][] map = null;	private int validNodeCodeBase = Room.BASE_NUM; //  map[y][x]/此變量==1時 [y][x]即為有效結點	public PathFinder(int[][] map) {	    this.map = map;	}	/** 尋找最短路徑,返回路徑反向鏈表的最后一個節點 */	public Node findPath(Node s, Node e) {		long startTime = System.currentTimeMillis();		if(map == null) return null;		if(!isValid(map, s.x, s.y) || !isValid(map, e.x, e.y)) return null;		int mapWidth = map[0].length;		int mapHeight = map.length;		Node result = null;		initLink();		Link link = new Link(s, 0, judge(s, e));		open.next = link;		link.prev = open;		Link linkParent = null;		Node n = null;		while((linkParent = open.next) != null) {		    open.next = linkParent.next;    //  第一個(最優)節點出隊			if(open.next != null) open.next.prev = open;			n = linkParent.node;			if(n.equals(e)) {   // 成功				result = n;				break;			}			//嘗試四個方向的鄰接節點			int x, y;			//上			x = n.x; y = n.y-1;			if(isValid(map, x, y))				generateChild(linkParent, x, y, e);			//下			x = n.x; y = n.y+1;			if(isValid(map, x, y))				generateChild(linkParent, x, y, e);			//左			x = n.x-1; y = n.y;			if(isValid(map, x, y))				generateChild(linkParent, x, y, e);			//右			x = n.x+1; y = n.y;			if(isValid(map, x, y))				generateChild(linkParent, x, y, e);			insert(closed, linkParent);		}		//System.out.print("lapse time1: " + (System.currentTimeMillis() - startTime));		releaseMem();		//System.out.println("lapse time2: " + (System.currentTimeMillis() - startTime));		return result;	}	private void initLink() {	    open.next = null;		closed.next = null;	}	private boolean isValid(int[][] map, int x, int y) {		int mapWidth = map[0].length;		int mapHeight = map.length;	    return (x >= 0 && x < mapWidth) &&			    (y >= 0 && y < mapHeight) &&				(isValidElement(map[y][x]));	}	/** 若code/validNodeCodeBase==1 code即為有效結點 */	private boolean isValidElement(int code) {		return code/validNodeCodeBase == 1;	}	private void generateChild(Link parentLink, int x, int y, Node e) {		Link oldLink = null;		if((oldLink = inOpen(x, y)) != null) {			if(parentLink.g+1 < oldLink.g) {				//  如果由此條路徑找到的 parentLink				//  比別的路徑找到的 oldLink 的代價(此處為g)小				oldLink.g = parentLink.g+1; //  更新走到此節點的權值				oldLink.f = oldLink.g + oldLink.h;				oldLink.node.parent = parentLink.node;				reSort(open, oldLink);    //  重新排序open表			}			return;		}		if((oldLink = inClosed(x, y)) != null) {			if(parentLink.g+1 < oldLink.g) {				//  如果由此條路徑找到的 parentLink				//  比別的路徑找到的 oldLink 的代價(此處為g)小				oldLink.g = parentLink.g+1; //  更新走到此節點的權值				oldLink.f = oldLink.g + oldLink.h;				oldLink.node.parent = parentLink.node;				//  從 oldLink 更新經過 oldLink 的所有路徑				delete(oldLink);				insert(open, oldLink);			}			return;		}		Node childNode = new Node(x, y);		childNode.parent = parentLink.node;		Link childLink = new Link(childNode, parentLink.g+1, judge(childNode, e));		insert(open, childLink);	}	/** 按f值從小到大的規則,把link插入雙鏈表head */	private void insert(Link head, Link link) {		Link temp = head;		while((temp.next != null) && (link.f > temp.next.f)) {			temp = temp.next;		}		//  temp 和 temp.next 之間為要插入的位置		link.prev = temp;		link.next = temp.next;		temp.next = link;		if(link.next != null) link.next.prev = link;	}	/** 因link的f值有變,重新排序 */	private void reSort(Link head, Link link) {		//  有待改進		delete(link);		insert(head, link);	}	private void delete(Link link) {		if(link.prev != null)			link.prev.next = link.next;		if(link.next != null)	    	link.next.prev = link.prev;		link.prev = link.next = null;	}	private Link inOpen(int x, int y) {	    Link link = open.next;		while(link != null) {			if(link.node.equals(x, y)) break;			link = link.next;		}		return link;	}	private Link inClosed(int x, int y) {	    Link link = closed.next;		while(link != null) {			if(link.node.equals(x, y)) break;			link = link.next;		}		return link;	}	private double judge(Node s, Node e) {		return judge(s.x, s.y, e.x, e.y);	}	/** 估價函數 */	private double judge(int sX, int sY, int eX, int eY) {		//待改進	    return ((sX-eX)*(sX-eX) + (sY-eY)*(sY-eY));	}	private void releaseMem() {		//待改進		//System.gc();		open = null;		closed = null;	}	/*	public static void main(String[] args) {		int[][] map = {							{ 0, 1, 0, 0, 0 },							{ 0, 0, 0, 1, 0 },							{ 0, 1, 0, 1, 1 },							{ 0, 1, 0, 1, 1 },							{ 0, 1, 0, 0, 0 },						};		PathFinder pathFinder = new PathFinder(map, 0);		Node s = new Node(0, 0);		Node e = new Node(map[0].length-1, map.length-1);		Node path = pathFinder.findPath(s, e);		if(path == null)			System.out.println("無可用路徑!");		else			while(path != null) {				System.out.println(path.toString() + "\n");				path = path.parent;			}	}	*/}class Link {	Link() {	}	Link(Node node, int g, double h) {		this.node = node;		this.h = h;		this.g = g;	    this.f = h+g;	}	Node node = null;	Link prev = null;	Link next = null;	double f;	double h;  //   到目的地的估計代價	int g;  //  走過的步數(深度),或路徑權值(默認都為1)的和	public String toString() {	    return "node:[" + node + "][g=" + g + ",h=" + h + ",f=" + f + "]";	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区在线观看视频| 国产精品久久久久久福利一牛影视 | 视频在线观看一区| 国产精品资源在线看| 欧美午夜不卡在线观看免费| 久久蜜桃av一区二区天堂| 亚洲电影一级片| 不卡电影免费在线播放一区| 欧美大片在线观看一区二区| 亚洲一区中文日韩| eeuss鲁片一区二区三区| 欧美精品一区二区精品网| 亚洲成年人网站在线观看| 99精品久久只有精品| 国产亚洲精品7777| 精一区二区三区| 911国产精品| 亚洲国产乱码最新视频| 色综合天天天天做夜夜夜夜做| 国产精品欧美久久久久一区二区| 日韩电影免费一区| 欧美亚洲一区二区在线| 国产精品美女www爽爽爽| 国产在线不卡视频| 欧美va在线播放| 美女任你摸久久| 欧美一区二区精品| 秋霞电影网一区二区| 欧美性高清videossexo| 一区二区视频免费在线观看| jizzjizzjizz欧美| 亚洲欧洲成人精品av97| 97久久精品人人做人人爽| 国产精品美女www爽爽爽| 成人黄页在线观看| 中文字幕一区二区三| 91亚洲大成网污www| 亚洲女性喷水在线观看一区| 91色porny| 亚洲一区二区视频在线| 精品视频色一区| 午夜精品一区在线观看| 欧美一区二区三区不卡| 捆绑调教美女网站视频一区| 欧美r级在线观看| 国产成人亚洲精品青草天美| 国产精品女人毛片| 91精品办公室少妇高潮对白| 亚洲综合精品久久| 7777精品伊人久久久大香线蕉的 | 亚洲另类在线视频| 欧美又粗又大又爽| 日韩在线播放一区二区| 日韩欧美一级精品久久| 国产高清无密码一区二区三区| 国产精品视频看| 日本道色综合久久| 日本不卡一区二区| 国产午夜亚洲精品理论片色戒| 99久久99久久精品免费看蜜桃| 亚洲国产中文字幕在线视频综合| 欧美一区二区三区免费大片| 成人的网站免费观看| 亚洲国产婷婷综合在线精品| 精品国产乱码91久久久久久网站| k8久久久一区二区三区| 日精品一区二区三区| 国产女人aaa级久久久级| 欧美性受xxxx| 国产一区二区伦理| 亚洲成人自拍偷拍| 欧美经典三级视频一区二区三区| 欧日韩精品视频| 国产在线精品一区二区不卡了| 一区在线中文字幕| 日韩欧美国产系列| 色94色欧美sute亚洲线路一久| 免费在线观看一区二区三区| 中文字幕一区二区三区乱码在线| 日韩欧美国产高清| 91久久精品一区二区三| 国产成都精品91一区二区三| 亚洲妇女屁股眼交7| 中文字幕欧美区| 日韩片之四级片| 欧美丝袜第三区| 成人av资源在线| 国产精品一二一区| 日韩av中文在线观看| 亚洲精品久久久蜜桃| 国产三级精品三级| 欧美电视剧在线看免费| 欧美日韩在线一区二区| 99国产精品久久久久久久久久久| 麻豆极品一区二区三区| 婷婷一区二区三区| 一区2区3区在线看| 亚洲婷婷在线视频| 国产丝袜在线精品| 久久久精品免费网站| 日韩欧美国产系列| 日韩一区二区三区视频在线观看| 在线观看一区二区精品视频| 99视频精品免费视频| 成人一区二区三区视频| 国产一区二区导航在线播放| 日本亚洲免费观看| 日欧美一区二区| 日韩影院精彩在线| 视频一区在线播放| 日韩国产精品久久久| 婷婷综合在线观看| 日本视频一区二区| 免费高清在线一区| 久久精品国产秦先生| 蜜桃一区二区三区在线| 久久国产福利国产秒拍| 久久精品国内一区二区三区| 久久国产精品99精品国产| 精品一区二区日韩| 国产一区在线不卡| 成人综合婷婷国产精品久久免费| 国产成人综合在线| av午夜精品一区二区三区| 99热这里都是精品| 欧美色精品在线视频| 9191久久久久久久久久久| 欧美一级片在线| 欧美变态凌虐bdsm| 国产精品入口麻豆原神| 亚洲欧美日韩中文播放 | 中文字幕一区二区三区色视频| 国产精品国产三级国产专播品爱网| 国产精品久久久久久户外露出 | 成人激情午夜影院| 色婷婷av一区二区三区之一色屋| 色综合久久综合网97色综合| 欧美三级韩国三级日本一级| 日韩欧美电影一区| 国产精品欧美精品| 婷婷开心久久网| 国产盗摄一区二区| 欧美午夜精品一区二区三区| 91精品国产一区二区三区蜜臀| 久久欧美一区二区| 一区二区三区视频在线看| 视频在线在亚洲| 成人午夜电影网站| 欧美巨大另类极品videosbest | 欧美aaaaa成人免费观看视频| 极品少妇xxxx偷拍精品少妇| 成人国产精品视频| 8x8x8国产精品| 国产精品动漫网站| 欧美aⅴ一区二区三区视频| 成人性生交大片免费看中文网站| 在线免费一区三区| 久久影视一区二区| 亚洲与欧洲av电影| 国产精品1区2区| 欧美日本视频在线| 国产精品不卡一区二区三区| 日韩精品成人一区二区在线| 成人激情av网| 精品日韩av一区二区| 亚洲综合激情另类小说区| 国产在线播放一区二区三区| 欧美性三三影院| 国产精品美女久久久久aⅴ国产馆| 午夜欧美电影在线观看| av在线播放一区二区三区| 欧美成人乱码一区二区三区| 亚洲激情自拍视频| 成人综合婷婷国产精品久久蜜臀| 日韩一区二区三区电影在线观看 | 亚洲成人自拍偷拍| 91一区二区在线| 国产午夜精品一区二区三区嫩草| 日韩经典中文字幕一区| 色94色欧美sute亚洲线路一久 | 欧美精品乱码久久久久久| 国产精品网站在线观看| 国内成人精品2018免费看| 欧美日本国产一区| 一区二区三区欧美亚洲| 成人av在线影院| 国产拍欧美日韩视频二区| 精一区二区三区| 欧美一级在线观看| 蜜臀av一级做a爰片久久| 69堂成人精品免费视频| 夜夜操天天操亚洲| 91黄色激情网站| 亚洲男女一区二区三区| 99久久伊人精品| 1024成人网色www| 一本大道av伊人久久综合| 国产精品第一页第二页第三页| 成人妖精视频yjsp地址| 中文欧美字幕免费|