深度优先搜索&&广度优先搜索

graph 队列,背包的实现在以前的记录中已实现

package 重复;

public class Graph {
	private final int V;
	private int E;
	private bag<Integer>[] adj;
	public Graph(int v) {
		this.V = v;
		this.E = 0;
		adj = (bag<Integer>[]) new bag[V];
		for(int x = 0;x<V;x++)
			adj[x] = new bag<Integer>();
	}
	public int E() {return E;}
	public int V() {return V;}
	public void addEdge(int v, int w) {
		adj[v].add(w);
		adj[w].add(v);
		E++;
	}
	public Iterable<Integer> adj(int v){return adj[v];}
}

depthfirstsearch

package 重复;

import java.util.Stack;

public class depthFirstPath {
	private int[] edgeTo;
	private boolean[] marked;
	private final int s;
	public depthFirstPath(Graph G, int s) {
		edgeTo = new int[G.V()];
		marked = new boolean[G.V()];
		this.s = s;
		dfs(G,s);
	}
	public void dfs(Graph G, int v) {
		marked[v] = true;
		for(int i:G.adj(v)) {
			if(!marked[i]) dfs(G,i);edgeTo[i] = v;
	    }
	}
	public boolean hasPathTo(int v) {
		return marked[v];
	}
	public Iterable<Integer> pathTo(int v){
		Stack<Integer> path = new Stack();
		for(int i = v;i != s;i = edgeTo[i])
			path.push(i);
		path.push(s);
		return path;
	}

}

breathfirstsearch

package 重复;

import java.util.Stack;

public class depthFirstPath {
	private int[] edgeTo;
	private boolean[] marked;
	private final int s;
	public depthFirstPath(Graph G, int s) {
		edgeTo = new int[G.V()];
		marked = new boolean[G.V()];
		this.s = s;
		dfs(G,s);
	}
	public void dfs(Graph G, int v) {
		marked[v] = true;
		for(int i:G.adj(v)) {
			if(!marked[i]) dfs(G,i);edgeTo[i] = v;
	    }
	}
	public boolean hasPathTo(int v) {
		return marked[v];
	}
	public Iterable<Integer> pathTo(int v){
		Stack<Integer> path = new Stack();
		for(int i = v;i != s;i = edgeTo[i])
			path.push(i);
		path.push(s);
		return path;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值