数据结构之深度优先与广度优先算法

图:
这里写图片描述

邻届表表示图:
这里写图片描述

代码:

package com.tu;

/**
 * Created by lcc on 2017/7/25.
 */
public class DFSyuBFS {
    public static void main(String[] args) {
        DFSyuBFS dFSyuBFS = new DFSyuBFS ();
        Linjiebiao linjiebiao = dfs.getShuJu();
        dFSyuBFS .Dfs(linjiebiao,2 );
        System.out.println("--------");

        dFSyuBFS .bfs(linjiebiao,2 );

    }

    int[] visited = new int[100];

    void bfs(Linjiebiao linjiebiao, int v) {
        int changdu =linjiebiao.n;
        ArcNode p;
        int w;
        int [] queue =new int [changdu];
        int front =0; int rear =0;
        int [] visistedqueue  = new int[changdu];

        System.out.println(v);
        visistedqueue[v] =1 ;
        rear = (rear+1)%changdu;
        queue[rear] =v;
        while (front !=rear) {
            front =(front+1)%changdu;
            w=queue[front];
            p=linjiebiao.adjlist[w].fistarc;
            while (p!=null) {
                if(visistedqueue[p.adjvex] ==0) {
                    System.out.println(p.adjvex);
                    visistedqueue[p.adjvex] =1;
                    rear =(rear+1)%changdu;
                    queue[rear] =p.adjvex;
                }
             p=p.nextarc;
            }
        }



    }

    void Dfs(Linjiebiao linjiebiao, int i) {
        ArcNode p;
        int w;
        visited[i] = 1;
        System.out.println(i);
        p = linjiebiao.adjlist[i].fistarc;
        while (p != null) {
            w = p.adjvex;
            if (visited[w] == 0) {
                Dfs(linjiebiao, w);
            }
            p = p.nextarc;
        }
    }
    //临界表表示图
    Linjiebiao getShuJu() {
        Linjiebiao linjiebiao = new Linjiebiao();
        linjiebiao.e = 7;
        linjiebiao.n = 5;
        Vnode vnode = new Vnode();
        linjiebiao.adjlist[0] = vnode;
        vnode.data = "1";
        ArcNode arcNode = new ArcNode();
        ArcNode arcNode2 = new ArcNode();
        ArcNode arcNode3 = new ArcNode();
        vnode.fistarc = arcNode;
        arcNode.adjvex = 1;
        arcNode.nextarc = arcNode2;
        arcNode2.adjvex = 3;
        arcNode2.nextarc = arcNode3;
        arcNode3.adjvex = 4;
        arcNode3.nextarc = null;

        Vnode vnode11 = new Vnode();
        linjiebiao.adjlist[1] = vnode11;
        vnode11.data = "2";
        ArcNode arcNode11 = new ArcNode();
        ArcNode arcNode211 = new ArcNode();
        ArcNode arcNode311 = new ArcNode();
        vnode11.fistarc = arcNode11;
        arcNode11.adjvex = 0;
        arcNode11.nextarc = arcNode211;
        arcNode211.adjvex = 2;
        arcNode211.nextarc = arcNode311;
        arcNode311.adjvex = 3;
        arcNode311.nextarc = null;


        Vnode vnode22 = new Vnode();
        linjiebiao.adjlist[2] = vnode22;
        vnode22.data = "3";
        ArcNode arcNode22 = new ArcNode();
        ArcNode arcNode222 = new ArcNode();
        ArcNode arcNode322 = new ArcNode();
        vnode22.fistarc = arcNode22;
        arcNode22.adjvex = 1;
        arcNode22.nextarc = arcNode222;
        arcNode222.adjvex = 3;
        arcNode222.nextarc = arcNode322;
        arcNode322.adjvex = 4;
        arcNode322.nextarc = null;


        Vnode vnode33 = new Vnode();
        linjiebiao.adjlist[3] = vnode33;
        vnode22.data = "4";
        ArcNode arcNode33 = new ArcNode();
        ArcNode arcNode233 = new ArcNode();
        ArcNode arcNode333 = new ArcNode();
        ArcNode arcNode433 = new ArcNode();
        vnode33.fistarc = arcNode33;
        arcNode33.adjvex = 0;
        arcNode33.nextarc = arcNode233;
        arcNode233.adjvex = 1;
        arcNode233.nextarc = arcNode333;
        arcNode333.adjvex = 2;
        arcNode333.nextarc = arcNode433;
        arcNode433.adjvex = 4;
        arcNode433.nextarc = null;

        Vnode vnode44 = new Vnode();
        linjiebiao.adjlist[4] = vnode44;
        vnode44.data = "5";
        ArcNode arcNode44 = new ArcNode();
        ArcNode arcNode244 = new ArcNode();
        ArcNode arcNode344 = new ArcNode();
        vnode44.fistarc = arcNode44;
        arcNode44.adjvex = 0;
        arcNode44.nextarc = arcNode244;
        arcNode244.adjvex = 2;
        arcNode244.nextarc = arcNode344;
        arcNode344.adjvex = 3;
        arcNode344.nextarc = null;
        return linjiebiao;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值