import java.util.Random;
import java.util.Vector;

import sun.misc.Queue;

/**
 * @author Marcus Liwicki
 *
 */
public class BFS {

	final int NODES = 100;
	int[] adjMatrix = new int[NODES*NODES];
	boolean[] markedNodes = new boolean[NODES];
	
	public BFS() {
		Random r = new Random();
		for(int i = 0; i<NODES; i++) {
			for(int j = 0;j<=i; j++) {
				if(r.nextInt()>(Integer.MAX_VALUE/(NODES/3))*(NODES/3-1)) {
					adjMatrix[i*NODES+j] = 1;
					adjMatrix[j*NODES+i] = 1;
				}
			}
		}
	}

	public void start() {
		Vector components = new Vector();
		try {
		Queue q = new Queue();
		System.out.println("Zusammenhangskomponenten:");
		for (int i = 0; i<NODES; i++) {
			if(!markedNodes[i]) {
				markedNodes[i] = true;
				System.out.println();
				System.out.print(i+", ");
				Vector elements = new Vector();
				Object o = new Integer(i);
				elements.add(o);
				q.enqueue(o);
				while(!q.isEmpty()) {
					int e;
						e = ((Integer) q.dequeue()).intValue();
					for(int j = 0; j<NODES;j++) {
						if(adjMatrix[e*NODES+j]>0 && !markedNodes[j]) {
							System.out.print(j+", ");
							markedNodes[j] = true;
							o = new Integer(j);
							elements.add(o);
							q.enqueue(o);
						}					
					}
				}
				components.add(elements);
			}
		}
		} catch (InterruptedException p) {
		}
		for(int i = 0;i<NODES; i++) {
			if(!markedNodes[i]) System.out.println("Fehler");
		}
	}

	public static void main(String[] args) {
		new BFS().start();
	}
}
