import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Scanner;
public class Main{
static int[][] edges;
static ArrayList<Integer> vertexList;
boolean[] isVisited;
public Main(int n){
edges = new int[n][n];
vertexList = new ArrayList<>(n);
isVisited = new boolean[n];
}
public int getFirst(int index){
for (int i = 0;i<vertexList.size();i++){
if (edges[index][i]>0){
return i;
}
}
return -1;
}
public int getNext(int v1,int v2){
for (int i = v2+1;i<vertexList.size();i++){
if (edges[v1][i]>0){
return i;
}
}
return -1;
}
public void bfs(boolean[] isVisited,int index){
System.out.print(vertexList.get(index)+" ");
isVisited[index] = true;
LinkedList queue = new LinkedList();
queue.addLast(index);
while(!queue.isEmpty()){
int u = (int)queue.poll();
int w = getFirst(u);
while (w!=-1){
if(!isVisited[w]){
System.out.print(vertexList.get(w)+" ");
queue.addLast(w);
isVisited[w] = true;
}else {
w = getNext(u,w);
}
}
}
}
public void bfs(){
for (int i = 0;i<vertexList.size();i++){
if(!isVisited[i]){
bfs(isVisited,i);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Main m = new Main(n);
for (int i = 0;i<n;i++){
vertexList.add(i);
}
for (int i = 0;i<n;i++){
for (int j = 0;j<n;j++){
edges[i][j] = sc.nextInt();
}
}
m.bfs();
}
}
7 分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复