- package com.eshore.sweetop.mapbase;
- import java.awt.Color;
- import java.util.LinkedList;
- import java.util.Queue;
- /**
- * Class GTest
- * @author wudongdong
- * GTest.java
- * Dec 4, 2008
- */
- public class GTest {
- //构造广度优先树
- /**
- * @param g
- * @param s
- */
- public static void BFS(Graphics g, Vertex s) {
- for (Vertex u : g) {
- u.setColor(Color.WHITE);
- u.setDepth(-1);
- u.setParent(null);
- }
- s.setColor(Color.GRAY);
- s.setDepth(0);
- s.setParent(null);
- Queue<Vertex> q = new LinkedList<Vertex>();
- q.offer(s);
- while (q.peek() != null) {
- Vertex u = q.poll();
- for (Vertex v : u.list) {
- if (v.getColor().equals(Color.WHITE)) {
- v.setColor(Color.GRAY);
- v.setDepth(u.depth+1);
- v.setParent(u);
- q.offer(v);
- }
- }
- u.setColor(Color.BLACK);
- }
- }
- //打印最短路径
- /**
- * @param g
- * @param s
- * @param v
- */
- public static void printPath(Graphics g,Vertex s,Vertex v){
- if(s==v){
- System.out.println(s.getId());
- }else{
- if(v.getParent()==null){
- System.out.println("no path from "+s.getId()+" to "+v.getId());
- }else{
- printPath(g,s,v.getParent());
- System.out.println(v.getId());
- }
- }
- }
- public static void main(String[] args) {
- //邻接表表示的图
- Vertex s1 = new Vertex(1);
- Vertex s2 = new Vertex(2);
- Vertex s3 = new Vertex(3);
- Vertex s4 = new Vertex(4);
- Vertex s5 = new Vertex(5);
- s1.getList().add(s2);
- s1.getList().add(s5);
- s2.getList().add(s1);
- s2.getList().add(s3);
- s2.getList().add(s4);
- s2.getList().add(s5);
- s3.getList().add(s2);
- s3.getList().add(s4);
- s4.getList().add(s2);
- s4.getList().add(s5);
- s4.getList().add(s3);
- s5.getList().add(s4);
- s5.getList().add(s1);
- s5.getList().add(s2);
- Graphics g = new Graphics(s1, s2, s3, s4, s5);
- GTest.BFS(g, s1);
- GTest.printPath(g, s1, s3);
- }
- }
图算法之广度优先搜索
最新推荐文章于 2022-08-03 11:25:28 发布