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

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

?? maxflow.java

?? Ford-Fulkerson關于有向連通圖的最小路徑算法。
?? JAVA
字號:
/****************************************//* File: Maxflow.java			*//* based on Ford-Fulkerson Method	*//* Copyright (C) 1997, 1998 K. Ikeda	*//****************************************/import java.applet.*;import java.awt.*;import java.io.*;import java.net.URL;class Node {	int	x;	int	y;	int	delta_plus;	/* edge starts from this node */	int	delta_minus;	/* edge terminates at this node */	int	dist;		/* distance from the start node */	int	prev;		/* previous node of the shortest path */	int	p_edge;	int	l;	int	w;	int	h;	String	name;}class Edge {	int	rndd_plus;	/* initial vertex of this edge */	int	rndd_minus;	/* terminal vertex of this edge */	int	delta_plus;	/* edge starts from rndd_plus */	int	delta_minus;	/* edge terminates at rndd_minus */	int	capacity;	/* capacity */	int	flow;		/* flow */	int	st;	String	name;}public class Maxflow extends Applet {	int	n,m;	int	snode,tnode;	/* start node, terminate node */	int	step;	Node	v[] = new Node[100];	Edge	e[] = new Edge[200];	int findNode(String name) {		for (int i=0; i<n; i++)			if (v[i].name.equals(name))				return i;		return -1;	}	void input_graph(InputStream is) throws IOException {		int x,y,l;		String	s;		StreamTokenizer st = new StreamTokenizer(is);		st.commentChar('#');		st.nextToken();	n = (int)st.nval;		st.nextToken();	m = (int)st.nval;		st.nextToken();	s = st.sval;		for (int i = 0; i<n; i++) {			Node node = new Node();			st.nextToken();	node.name = st.sval;			st.nextToken();	node.x = (int)st.nval;			st.nextToken();	node.y = (int)st.nval;			v[i] = node;		}		for (int i = 0; i<m; i++) {			Edge edge = new Edge();			st.nextToken();	edge.name = st.sval;			switch (st.nextToken()) {			case StreamTokenizer.TT_NUMBER:				edge.rndd_plus = (int)st.nval;				break;			case StreamTokenizer.TT_WORD:				edge.rndd_plus = findNode(st.sval);				break;			default:				break;			}			switch (st.nextToken()) {			case StreamTokenizer.TT_NUMBER:				edge.rndd_minus = (int)st.nval;				break;			case StreamTokenizer.TT_WORD:				edge.rndd_minus = findNode(st.sval);				break;			default:				break;			}			st.nextToken();	edge.capacity = (int)st.nval;			edge.flow = 0;			e[i] = edge;		}		step = 1;	}	void rdb() {		int	i,k;		for (i=0; i<n; i++)			v[i].delta_plus = v[i].delta_minus = -1;		for (i=0; i<m; i++)			e[i].delta_plus = e[i].delta_minus = -1;		for (i=0; i<m; i++) {			k = e[i].rndd_plus;			if (v[k].delta_plus == -1)				v[k].delta_plus = i;			else {				k = v[k].delta_plus;				while(e[k].delta_plus >= 0)					k = e[k].delta_plus;				e[k].delta_plus = i;			}			k = e[i].rndd_minus;			if (v[k].delta_minus == -1)				v[k].delta_minus = i;			else {				k = v[k].delta_minus;				while(e[k].delta_minus >= 0)					k = e[k].delta_minus;				e[k].delta_minus = i;			}		}	}	void stpath() {		/* find an s-t path */		int	u[] = new int[100], ni, no;		int	i,j,d;		for (i=0; i<n; i++) {			v[i].prev = v[i].dist = -1;			v[i].l = 0;		}		for (i=0; i<m; i++)			e[i].st = -1;		ni = no = 0;		d = 0;		u[ni] = snode;		v[snode].dist = 0;		j = v[snode].delta_plus;		i = 0;		while (j>=0) {			if (i<e[j].capacity)				i = e[j].capacity;			j = e[j].delta_plus;		}		v[snode].l = i;		for (; no<=ni; no++) {			d = v[u[no]].dist;			for (j=v[u[no]].delta_plus; j>=0; j=e[j].delta_plus) {				if (e[j].capacity-e[j].flow == 0)					continue;				i = e[j].rndd_minus;				if (v[i].dist<0) {					v[i].dist = d+1;					v[i].prev = u[no];					v[i].p_edge = j;					v[i].l = Math.min(v[u[no]].l,						e[j].capacity-e[j].flow);					e[j].st++;					u[++ni] = i;				}			}			for (j=v[u[no]].delta_minus; j>=0; j=e[j].delta_minus) {				if (e[j].flow == 0)					continue;				i = e[j].rndd_plus;				if (v[i].dist<0) {					v[i].dist = d+1;					v[i].prev = u[no];					v[i].p_edge = j;					v[i].l = Math.min(v[u[no]].l,e[j].flow);					e[j].st++;					u[++ni] = i;				}			}		}	}	void step0() {	/* initialize */		for (int i=0; i<m; i++)			e[i].flow = 0;		stpath();	}	void step1() {		/* mark an s-t path */		int	i;		if (v[tnode].dist<0)			return;		for (i = tnode; v[i].prev>=0; i=v[i].prev )			e[v[i].p_edge].st++;	}	void step2() {		/* augment the flow */		int	i,j,a,f;		f = v[tnode].l;		for (i = tnode; (j=v[i].prev)>=0; i = j) {			a = v[i].p_edge;			if (e[a].rndd_minus==i)				e[a].flow += f;			else if (e[a].rndd_plus==i)				e[a].flow -= f;		}		stpath();	}	public void init() {		String mdname = getParameter("inputfile");		try {			InputStream is;			is = new URL(getDocumentBase(),mdname).openStream();			input_graph(is);			try {				if (is != null)					is.close();				} catch(Exception e) {			}		} catch (FileNotFoundException e) {			System.err.println("File not found.");		} catch (IOException e) {			System.err.println("Cannot access file.");		}		String s = getParameter("s");		if (s != null)			snode = Integer.parseInt(s);		else			snode = 0;		s = getParameter("t");		if (s != null)			tnode = Integer.parseInt(s);		else			tnode = n-1;		setBackground(Color.white);		rdb();		step0();	}	public void paintNode(Graphics g, Node n, FontMetrics fm) {		String s;		int x = n.x;		int y = n.y;		int w = fm.stringWidth(n.name) + 10;		int h = fm.getHeight() + 4;		n.w = w;		n.h = h;		Color	c;		if (n.dist<0)			c = Color.gray;		else			c = Color.blue;		g.setColor(c);		g.drawRect(x-w/2,y-h/2,w,h);		g.setColor(getBackground());		g.fillRect(x-w/2+1,y-h/2+1,w-1,h-1);		g.setColor(c);		g.drawString(n.name,x-(w-10)/2,(y-(h-4)/2)+fm.getAscent());	}	int [] xy(int a, int b, int w, int h) {		int	x[] = new int[2];		if (Math.abs(w*b)>=Math.abs(h*a)) {			x[0] = ((b>=0)?1:-1)*a*h/b/2;			x[1] = ((b>=0)?1:-1)*h/2;		} else {			x[0] = ((a>=0)?1:-1)*w/2;			x[1] = ((a>=0)?1:-1)*b*w/a/2;		}		return x;	}	void drawArrow(Graphics g,int x1,int y1,int x2,int y2) {		int	a = x1-x2;		int	b = y1-y2;		double	aa = Math.sqrt(a*a+b*b)/16.0;		double	bb = b/aa;			aa = a/aa;		g.drawLine(x2,y2,x2+(int)((aa*12+bb*5)/13),				 y2+(int)((-aa*5+bb*12)/13));		g.drawLine(x2,y2,x2+(int)((aa*12-bb*5)/13),				 y2+(int)((aa*5+bb*12)/13));		g.drawLine(x1,y1,x2,y2);	}	public void paintEdge(Graphics g, Edge e, FontMetrics fm) {		Node v1 = v[e.rndd_plus];		Node v2 = v[e.rndd_minus];		Color	c;		int a = v1.x-v2.x;		int b = v1.y-v2.y;		int x1[] = xy(-a,-b,v1.w,v1.h);		int x2[] = xy(a,b,v2.w,v2.h);		if (e.st>0)			c = Color.red;		else if ((v1.dist>=0)&&(v2.dist>=0))			c = Color.blue;		else			c = Color.gray;		g.setColor(c);		drawArrow(g,v1.x+x1[0],v1.y+x1[1],v2.x+x2[0],v2.y+x2[1]);		int w = fm.stringWidth(""+e.flow+"/"+e.capacity);		int h = fm.getHeight();		g.setColor(getBackground());		g.fillRect((v1.x+v2.x-w)/2,(v1.y+v2.y-h)/2,w,h);		g.setColor(Color.black);		g.drawString(""+e.flow+"/"+e.capacity,			(v1.x+v2.x-w)/2,(v1.y+v2.y-h)/2+fm.getAscent());	}	public void paint(Graphics g) {		FontMetrics fm = g.getFontMetrics();		for (int i=0; i<n; i++)			paintNode(g,v[i],fm);		for (int i=0; i<m; i++)			paintEdge(g,e[i],fm);		Residue p = (Residue)getAppletContext().getApplet("residue");		if (p!=null)			p.set(1,n,m,snode,tnode,v,e);	}	public void update(Graphics g) {		paint(g);	}	public boolean mouseDown(Event ev, int x, int y)	{		if (step==1) {			step1();			if (v[tnode].dist<0)				step = 0;			else				step = 2;		} else if (step==2){			step2();			step = 1;		} else {			step0();			step = 1;		}		repaint();		return true;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费欧美日韩国产三级电影| www.欧美日韩国产在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 一区二区在线看| 美女性感视频久久| 福利一区在线观看| 欧美三级欧美一级| 久久天天做天天爱综合色| 国产精品久久久久精k8 | 懂色av中文一区二区三区| 色狠狠一区二区| 日韩三级视频中文字幕| 国产日韩欧美不卡在线| 亚洲综合色成人| 久久国产精品第一页| 91小视频在线| 亚洲成人一区二区在线观看| 国产电影精品久久禁18| 91精选在线观看| 最新成人av在线| 国产白丝网站精品污在线入口| 欧美日韩激情在线| √…a在线天堂一区| 国产毛片精品一区| 欧美福利视频导航| 亚洲观看高清完整版在线观看 | 国产精品欧美久久久久一区二区| 日本中文在线一区| 欧美伦理视频网站| 视频一区在线播放| 在线成人av影院| 天堂久久久久va久久久久| 91首页免费视频| 亚洲欧洲性图库| 波多野洁衣一区| 国产精品天天看| 99久久综合狠狠综合久久| 久久嫩草精品久久久久| 国产一区久久久| 国产日韩欧美综合一区| 国产成人一区在线| xfplay精品久久| 国产一区二区三区不卡在线观看| 精品国产露脸精彩对白 | 亚洲人成影院在线观看| a级精品国产片在线观看| 成人欧美一区二区三区小说| aa级大片欧美| 亚洲综合图片区| 欧美一区二区三区四区五区| 麻豆精品一区二区三区| 精品成人一区二区三区| heyzo一本久久综合| 亚洲免费av网站| 欧美一区2区视频在线观看| 国产在线精品一区二区夜色| 日本一区二区成人| 欧美日韩在线观看一区二区 | 综合久久久久久久| 欧美一区二区三区啪啪| 国产成人免费av在线| 亚洲综合在线免费观看| 精品久久国产字幕高潮| 一本一道波多野结衣一区二区| 亚洲第一成人在线| 中文无字幕一区二区三区| 在线视频欧美精品| 国产黑丝在线一区二区三区| 亚洲va欧美va人人爽| 国产精品天美传媒沈樵| 在线播放91灌醉迷j高跟美女 | 精品日韩在线一区| 欧美羞羞免费网站| 国产精品 日产精品 欧美精品| 亚洲第一成年网| 亚洲男人的天堂一区二区| 精品久久久久av影院| 欧亚洲嫩模精品一区三区| 国产一区 二区 三区一级| 丝袜亚洲另类丝袜在线| 亚洲精品免费在线| 亚洲人成精品久久久久| 国产清纯白嫩初高生在线观看91 | 国产又粗又猛又爽又黄91精品| 亚洲午夜在线观看视频在线| 中文子幕无线码一区tr| 欧美精品一区二区三区一线天视频 | 欧美一区二区女人| 欧美日韩免费观看一区三区| 色综合久久综合网97色综合| 国产麻豆精品theporn| 国产乱码精品一区二区三区五月婷| 日本成人在线一区| 免费人成黄页网站在线一区二区| 亚洲.国产.中文慕字在线| 亚洲摸摸操操av| 日日夜夜精品视频免费| 日韩成人伦理电影在线观看| 午夜电影一区二区| 精品一区二区免费在线观看| 国产剧情一区在线| 大尺度一区二区| 91麻豆自制传媒国产之光| 色婷婷狠狠综合| 91精品国产入口| 2020国产精品自拍| 亚洲美女淫视频| 日韩不卡免费视频| 国产精品一品视频| 国产精品18久久久久久久网站| 99久久综合狠狠综合久久| 欧美日韩亚洲综合| 久久久久久黄色| 亚洲人吸女人奶水| 麻豆91精品视频| 一本久道中文字幕精品亚洲嫩| 欧美日韩三级一区| 国产欧美一区二区精品性色| 亚洲综合一区二区| 午夜欧美2019年伦理| 国产二区国产一区在线观看| 欧美三级一区二区| 中文字幕va一区二区三区| 青娱乐精品在线视频| 91视频91自| 国产午夜三级一区二区三| 婷婷中文字幕一区三区| 国产在线麻豆精品观看| 欧美高清性hdvideosex| 亚洲日本在线看| 成人网男人的天堂| 欧美一区二区三区在线看| 亚洲图片一区二区| 91麻豆精品在线观看| 久久久久久电影| 国产在线精品免费av| 日韩一区二区在线播放| 午夜激情一区二区三区| 欧美综合久久久| 亚洲一区二区影院| 日本精品一区二区三区高清 | 亚洲国产精品99久久久久久久久| 奇米精品一区二区三区在线观看| 91成人免费在线视频| 亚洲激情图片一区| 欧美色成人综合| 天堂蜜桃91精品| 日韩欧美一区二区久久婷婷| 亚洲sss视频在线视频| 欧美精品少妇一区二区三区| 天天色综合天天| 777亚洲妇女| 久久精品国产77777蜜臀| 欧美不卡一区二区| 国产精品羞羞答答xxdd| 中文字幕第一区综合| 9人人澡人人爽人人精品| 亚洲精品中文字幕乱码三区 | 日精品一区二区三区| 精品少妇一区二区三区免费观看| 久久成人av少妇免费| 国产午夜精品一区二区三区视频 | 国产一区二区免费看| 国产精品高清亚洲| 欧美日韩国产高清一区二区三区| 狠狠色丁香九九婷婷综合五月| 国产精品欧美一区喷水| 欧美欧美欧美欧美| 狠狠狠色丁香婷婷综合激情 | 午夜国产精品一区| 中文av一区二区| 91精品国产丝袜白色高跟鞋| 成人午夜电影小说| 亚洲一区二区在线免费观看视频| 精品久久久久香蕉网| 欧美在线观看视频一区二区| 捆绑调教美女网站视频一区| 欧美激情一区二区在线| 欧美精品一级二级| 99麻豆久久久国产精品免费优播| 日本少妇一区二区| 亚洲尤物视频在线| 欧美国产一区二区| 久久一日本道色综合| 91精品国产欧美一区二区18 | 蜜臀av国产精品久久久久| 一区二区三区美女| 1024成人网色www| 国产欧美日产一区| 精品美女在线观看| 欧美一区二区三区在线视频| 欧美午夜一区二区三区免费大片| 不卡的av中国片| 国产精品18久久久久久久久| 另类的小说在线视频另类成人小视频在线 | 国产福利91精品一区二区三区| 日本不卡1234视频| 日韩电影在线免费| 免费国产亚洲视频| 麻豆精品在线看|