連通セットのリスト(java)
1639 ワード
7-6連通セットのリスト(25分)
N個の頂点とE個のエッジを持つ無方向図を指定し、DFSとBFSでそれぞれの連通セットをリストします.頂点を0からN−1まで番号付けするとする.探索を行う場合,常に番号が最小の頂点から出発し,番号が増加する順に隣接点にアクセスすると仮定する.
入力形式:
1行目を入力すると2個の整数N(0)が与えられる
出力フォーマット:
「{v 1 v 2...v k}」の形式で、各行に連通セットが出力されます.DFSの結果を出力してからBFSの結果を出力します.
サンプルを入力:
出力サンプル:
考え方:
1、最も基本的なDFSとBFSの操作を考察して、純粋に問題を作るならば、直接隣接行列で図を建てて、図が手間を省くならば、無方向図も対称行列を創立します.
2、点数、辺数、2次元配列、visited配列はすべてグローバル変数に設定します.
3、DFS再帰実現.BFSはキューQueueで実現し,addのたびに出力などの要素を操作しながらvisited行列を更新する.
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