思路:先将图保存在二维数组,然后对图进行DFS。先找到根节点,然后找根节点的子节点,对子节点DFS。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int maxn = 200;
static char[][] G = new char[maxn+5][maxn+5];
static int cnt = 0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
scan.nextLine();
while(t--!=0){
for(int i=0;i<maxn;i++){
Arrays.fill(G[i], ' ');
}
cnt = 0;
while(true){
String str = scan.nextLine();
if("#".equals(str))break;
for(int i=0;i<str.length();i++){
G[cnt][i] = str.charAt(i);
}
cnt++;
}
int c = -1;
for(int i=0;i<maxn;i++){
if(G[0][i]!=' '){
c = i;
break;
}
}
System.out.print("(");
if(c!=-1){
dfs(0,c);
}
System.out.print(")\n");
}
}
public static void dfs(int r,int c){
System.out.printf("%c(",G[r][c]);
if(r+1<cnt&&G[r+1][c]=='|'){
int i = c;
while(i-1>=0&&G[r+2][i-1]=='-')i--;
while(G[r+2][i]=='-'){
if(G[r+3][i]!=' ')dfs(r+3,i);
i++;
}
}
System.out.printf(")");
}
}
本文介绍了一种使用深度优先搜索(DFS)遍历图的方法,并通过一个具体例子展示了如何利用Java实现该算法。首先将图存储在一个二维数组中,然后从根节点开始递归地访问每个子节点。该算法能够输出图的结构形式。
508

被折叠的 条评论
为什么被折叠?



