弱弱的实现了广度优先,以前图方便很少用邻接表的。

本文详细介绍了如何使用广度优先遍历算法对图进行遍历的过程,包括初始化队列、标记节点状态以及遍历节点的邻接节点。通过实例展示了算法的应用,有助于理解广度优先搜索在图论中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;

public class GBreadthTraverse
{
    public void breadthTras(Graph g)
    {

    Queue<Node> queue = new ArrayBlockingQueue<Node>(20);

    Node t = null;
    for (Node n : g.nds)
    {
        Node s = n;
        if (!s.isVisited)
        {
        queue.add(s);
        System.out.println(s.name);
        s.isVisited = true;
        while (!queue.isEmpty())
        {
            {
            t = queue.poll();
            if (t.firstArc != null)
            {
                Arc tarc = t.firstArc;
                if (!tarc.nd.isVisited)
                {
                queue.add(tarc.nd);
                System.out.println(tarc.nd.name);
                tarc.nd.isVisited = true;
                }
                while (tarc.nextArc != null)
                {
                tarc = tarc.nextArc;
                if (!tarc.nd.isVisited)
                {
                    queue.add(tarc.nd);
                    System.out.println(tarc.nd.name);
                    tarc.nd.isVisited = true;
                }
                }
            }
            }
        }
        }
    }
    }

    public static void main(String[] args)
    {
    Graph g = new Graph(8);
    Node ns = new Node();
    Node nr = new Node();
    Node nv = new Node();
    Node nw = new Node();
    Node nt = new Node();
    Node nx = new Node();
    Node ny = new Node();
    Node nu = new Node();
    Arc arc1 = new Arc();
    Arc arc2 = new Arc();
    Arc arc3 = new Arc();
    Arc arc4 = new Arc();
    Arc arc5 = new Arc();
    Arc arc6 = new Arc();
    Arc arc7 = new Arc();
    Arc arc8 = new Arc();
    Arc arc9 = new Arc();
    Arc arc10 = new Arc();
    Arc arc11 = new Arc();
    Arc arc12 = new Arc();
    Arc arc13 = new Arc();
    Arc arc14 = new Arc();
    Arc arc15 = new Arc();
    Arc arc16 = new Arc();
    Arc arc17 = new Arc();
    Arc arc18 = new Arc();
    Arc arc19 = new Arc();
    Arc arc20 = new Arc();
    ns.firstArc = arc1;
    nr.firstArc = arc3;
    nv.firstArc = arc5;
    nw.firstArc = arc6;
    nt.firstArc = arc9;
    nx.firstArc = arc12;
    ny.firstArc = arc16;
    nu.firstArc = arc18;
    ns.name = 's';
    nr.name = 'r';
    nv.name = 'v';
    nw.name = 'w';
    nt.name = 't';
    nx.name = 'x';
    ny.name = 'y';
    nu.name = 'u';
    arc1.nd = nr;
    arc2.nd = nw;
    arc3.nd = ns;
    arc4.nd = nv;
    arc5.nd = nr;
    arc6.nd = ns;
    arc7.nd = nt;
    arc8.nd = nx;
    arc9.nd = nw;
    arc10.nd = nu;
    arc11.nd = nx;
    arc12.nd = nw;
    arc13.nd = nt;
    arc14.nd = nu;
    arc15.nd = ny;
    arc16.nd = nx;
    arc17.nd = nu;
    arc18.nd = nt;
    arc19.nd = nx;
    arc20.nd = ny;
    arc1.nextArc = arc2;
    arc2.nextArc = null;
    arc3.nextArc = arc4;
    arc4.nextArc = null;
    arc5.nextArc = null;
    arc6.nextArc = arc7;
    arc7.nextArc = arc8;
    arc8.nextArc = null;
    arc9.nextArc = arc10;
    arc10.nextArc = arc11;
    arc11.nextArc = null;
    arc12.nextArc = arc13;
    arc13.nextArc = arc14;
    arc14.nextArc = arc15;
    arc15.nextArc = null;
    arc16.nextArc = arc17;
    arc17.nextArc = null;
    arc18.nextArc = arc19;
    arc19.nextArc = arc20;
    arc20.nextArc = null;
    g.nds.add(ns);
    g.nds.add(nr);
    g.nds.add(nv);
    g.nds.add(nw);
    g.nds.add(nt);
    g.nds.add(nx);
    g.nds.add(ny);
    g.nds.add(nu);
    new GBreadthTraverse().breadthTras(g);
    }

}

class Node
{
    public char name;
    public Arc firstArc;
    public boolean isVisited;
}

class Arc
{
    public Node nd;
    public Arc nextArc;
}

class Graph
{
    public int n;
    public List<Node> nds;

    public Graph(int n)
    {
    nds = new ArrayList<Node>(n);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值