图---邻接表的深度搜索与广度搜索测试一

来源:互联网 发布:工业设计用什么软件 编辑:程序博客网 时间:2024/05/18 17:43

 

import java.util.LinkedList;import java.util.Queue;//线链class Line {int index; // 顶点下标Line nextLine;}// 节点class Point {String name;boolean isVisit;Line firstLine;public Point(String name) {this.name = name;}}public class GraphLink {static final int LENGTH = 10;Point[] points;int curLength;public GraphLink() {points = new Point[LENGTH];}void addPoint(Point point) {points[curLength++] = point;}void addLine(int x, int y) {Line line = new Line();line.index = y;line.nextLine = points[x].firstLine;points[x].firstLine = line;Line line2 = new Line();line2.index = x;line2.nextLine = points[y].firstLine;points[y].firstLine = line2;}    private void initPoints() {        for (int i = 0; i < curLength; i++) {            points[i].isVisit = false;        }    }    /**     * 深度搜索     * A节点开始,循环A的线链,如果下一个节点F,未被访问,就递归到节点F的线链,     * 如果下一个节点已经被访问过,就把A的线链指向再下一个节点C,直到没后继节点为止     */public void dfs() {for(int i = 0; i < curLength; i++){Point point = points[i];showPoint(point);}        initPoints();}private void showPoint(Point point) {if(!point.isVisit){showName(point.name);            showNbsp();point.isVisit = true;}Line line = point.firstLine;while(line != null){Point p = points[line.index];if(!p.isVisit){showPoint(p);}line  = line.nextLine;}}    /**     * 广度搜索     * 循环各个节点的线链     */    private void bfs() {        Queue<Integer> queue = new LinkedList<Integer>();        for (int i = 0; i < curLength; i++) {            Point point  = points[i];            if(!point.isVisit){                queue.add(i);                showName(point.name);                showNbsp();                while (!queue.isEmpty()){                    Point _point = points[queue.peek()];                    _point.isVisit = true;                    Line line = _point.firstLine;                    while (line != null){                        Point p = points[line.index];                        if(!p.isVisit){                            showName(p.name);                            showNbsp();                            p.isVisit = true;                            queue.add(line.index);                        }                        line = line.nextLine;                    }                    queue.poll();                }            }        }        initPoints();    }    /**     * 最小生成树     * 区别是打印当前节点     */    public void mfs() {        for (int i = 0; i < curLength; i++) {            Point point = points[i];            showPointMfs(point);        }        initPoints();    }    private void showPointMfs(Point point) {        if (!point.isVisit) {            point.isVisit = true;        }        Line line = point.firstLine;        while (line != null) {            Point p = points[line.index];            if (!p.isVisit) {                showName(point.name);                showName(p.name);                showNbsp();                showPointMfs(p);            }            line = line.nextLine;        }    }    public void showNbsp() {        System.out.print(" ");    }    private void showName(String name) {System.out.print(name);}public static void printLn(String name) {System.out.println("");System.out.println(name);}public static void main(String[] args) {GraphLink g = new GraphLink();for (int i = 65; i <= 70; i++) {char c = (char) i;Point point = new Point(c + "");g.addPoint(point);}g.addLine(0, 1); // abg.addLine(0, 2); // acg.addLine(0, 5); // afg.addLine(1, 3); // bdg.addLine(2, 3); // cdg.addLine(2, 4); // ceg.addLine(3, 4); // deprintLn("深度搜索:");g.dfs();        printLn("广度搜索:");        g.bfs();        printLn("最小生成树:");        g.mfs();}}


 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 铁耳屎在最里面怎么办 婴儿鼻屎特别深怎么办 鼻子干呼吸就疼怎么办 儿童鼻子里总有好多鼻屎怎么办 小孩鼻子里有鼻屎呼吸不通怎么办 鼻子不通通气鼻屎粘在鼻子怎么办 鼻子里面干燥长鼻屎怎么办 鼻孔里干的难受怎么办 每天有很多鼻屎怎么办 鼻子里面干的疼怎么办 婴儿鼻屎堵住了怎么办 婴儿有很多鼻屎怎么办 隆鼻7天好多鼻屎怎么办 隆鼻第五天好多鼻屎怎么办 小孩鼻屎堵住了怎么办 风寒感冒流清鼻涕怎么办 流清鼻涕吐黄痰不发烧怎么办 宝宝流黄鼻涕发烧怎么办 感冒了浓鼻涕多怎么办 感冒流浓鼻涕怎么办速效办法 孩子一直流清水鼻涕怎么办 宝宝鼻子呼噜呼噜响怎么办 鼻涕往嗓子里流怎么办 咳嗽痰多鼻涕多怎么办 没感冒嗓子痰多鼻涕怎么办 孩子感冒后鼻涕特别多怎么办 经常有鼻涕怎么办才好 怀孕后鼻涕痰多怎么办 鼻炎有鼻涕痰多怎么办 宝宝咳嗽痰多鼻涕多怎么办 宝宝两岁清鼻涕咳嗽痰多怎么办 喉咙咸咸的有痰怎么办 宝宝咳嗽鼻塞喉咙有痰怎么办 绝地求生刺激战场射击键误触怎么办 在皮卡堂卡的游泳了怎么办 假如遇到老赖没能力还钱怎么办 服刑人拒不执行伤害赔偿怎么办? 面对当前严峻形势作为军人怎么办 想起诉不知道对方地址怎么办 遇见家里来嫌疑人员怎么办 老滚5老婆死了怎么办