PTA【列出连通集】Java

列出连通集

给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:

输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式:

按照"{ v​1,v2, … vk}"的格式,每行输出一个连通集。先输出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 }

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.Queue;

public class Main {
    
    
	static int n, e;
	static boolean[] flag;
	static int[][] arr;
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	public static void main(String[] args) throws IOException {
    
    
		String[] str = br.readLine().split(" ");
		n = Integer.parseInt(str[0]);
		e = Integer.parseInt(str[1]);
		int a,b;
		String[] s = new String[2];
		arr = new int[n][n];
		for(int i = 0; i < e; ++i) {
    
    
			s = br.readLine().split(" ");
			a = Integer.parseInt(s[0]);
			b = Integer.parseInt(s[1]);
			arr[a][b] = arr[b][a] = 1;
		}
		
		flag = new boolean[n];
		for(int v = 0; v < n; ++v) {
    
    
			if(!flag[v]) {
    
    
				out.print("{ ");
				DFS(v);
				out.println("}");
			}
		}
		
		flag = new boolean[n];
		for(int v = 0; v < n; ++v) {
    
    
			if(!flag[v]) {
    
    
				out.print("{ ");
				BFS(v);
				out.println("}");
			}
		}
		
		out.flush();
	}
	static void DFS(int v) {
    
    
		flag[v] = true;
		out.print(v + " ");
		for(int i = 0; i < n; ++i) {
    
    
			if(arr[v][i] == 1 && flag[i] == false) {
    
    
				DFS(i);
			}
		}
	}
	static void BFS(int v) {
    
    
		Queue<Integer> q = new LinkedList<Integer>();
		q.add(v);
		flag[v] = true;
		out.print(v + " ");
		while(!q.isEmpty()) {
    
    
			int x = q.poll();
			for(int i = 0; i < n; ++i) {
    
    
				if(arr[x][i] == 1 && flag[i] == false) {
    
    
					q.add(i);
					out.print(i + " ");
					flag[i] = true;
				}
			}
		}
	}
}

运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_50816725/article/details/109456242