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);
}
}