import java.util.*;
public class Main {
public int[] solution(int[][] A,int n) {
ArrayList<Set<Integer>> connectionSub = new ArrayList<>();//保存所有的连通子图
Stack<Integer> tree = new Stack<>();
Boolean[] isTra = new Boolean[n];
for (int i = 0; i < n; i++) {
isTra[i] = false;
}
// 遍历每一行
for (int i = 0; i < n;) {
if (isTra[i] == true) {
++i;
continue;
}
tree.push(i);
Set<Integer> sub = new HashSet<>();
sub.add(i);
int j = tree.peek();
while (!tree.isEmpty() && isTra[j] == false) {
j = tree.pop();// 取出栈顶元素
isTra[j] = true;
// 遍历每一个列
for (int k = 0; k < n; ++k) {
if (false == isTra[k]) {
if (A[j][k] == 1 && isTra[k] == false) {
tree.push(k);// 若k没有被遍历过,则压入栈
sub.add(k);
}
}
}
if (!tree.isEmpty()) {
j = tree.peek();
}
}
++i;
connectionSub.add(sub);
}
Set<Integer> maxSub = new HashSet<>();
for (Set<Integer> set : connectionSub) {
if (set.size() > maxSub.size())
maxSub = set;
}
int len = maxSub.size();
int[] maxCon = new int[len];
int i = 0;
for (Integer integer : maxSub)
maxCon[i++] = integer;
Arrays.sort(maxCon);
return maxCon;
}
}