連通セットのリスト(java)

1639 ワード

7-6連通セットのリスト(25分)
N個の頂点とE個のエッジを持つ無方向図を指定し、DFSとBFSでそれぞれの連通セットをリストします.頂点を0からN−1まで番号付けするとする.探索を行う場合,常に番号が最小の頂点から出発し,番号が増加する順に隣接点にアクセスすると仮定する.
入力形式:
1行目を入力すると2個の整数N(0)が与えられる
出力フォーマット:
「{v 1 v 2...v k}」の形式で、各行に連通セットが出力されます.DFSの結果を出力してからBFSの結果を出力します.
サンプルを入力:
8 6
0 7
0 1
2 0
4 1
2 4
3 5

出力サンプル:
{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }

考え方:
1、最も基本的なDFSとBFSの操作を考察して、純粋に問題を作るならば、直接隣接行列で図を建てて、図が手間を省くならば、無方向図も対称行列を創立します.
2、点数、辺数、2次元配列、visited配列はすべてグローバル変数に設定します.
3、DFS再帰実現.BFSはキューQueueで実現し,addのたびに出力などの要素を操作しながらvisited行列を更新する.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {

	static int N,E;
	static int [][] node;
	static boolean visited [] ;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner in = new Scanner(System.in);
		N = in.nextInt();
		E = in.nextInt();
		node = new int[N][N];
		visited = new boolean[N];
		
		for(int i = 0; i qu = new LinkedList<>();
		qu.add(V);
		System.out.print(V+" ");
		visited[V]=true;
		while(!qu.isEmpty()) {
			int Vertex = qu.poll();
			for(int i = 0;i