图
图的深度优先遍历 邻接矩阵
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class MGraph{
int n;
int e;
String[] vertex;
int[][] edges;
}
public class DfsGraph {
public static void main(String[] args) {
MGraph graph=new MGraph();
creatGraph(graph);
printg(graph);
List<String> res= dfsGraph(graph);
for (int i=0;i<res.size();i++){
System.out.println(res.get(i));
}
}
public static String dfs( MGraph g,int start,int[] visitd,StringBuilder sb){
visitd[start]=1;
sb.append(g.vertex[start]);
for(int i=0;i<g.n;i++){
if(g.edges[start][i]>0 && visitd[i]==0){
dfs(g,i,visitd,sb);
}
}
return sb.toString();
}
public static List<String> dfsGraph(MGraph g){
int[] visitd=new int[g.n];
List<String> res=new ArrayList<>();
for(int i=0;i<g.n;i++){
if(visitd[i]==0){
res.add(dfs(g,i,visitd,new StringBuilder()));
}
}
return res;
}
public static void creatGraph(MGraph graph){
Scanner in=new Scanner(System.in);
System.out.println("输入顶点数n");
graph.n=in.nextInt();
graph.vertex=new String[graph.n];
graph.edges=new int[graph.n][graph.n];
System.out.println("输入顶点编号");
for (int i=0;i< graph.n;i++){
graph.vertex[i]=in.next();
}
System.out.println("输入 边的信息 ");
for (int i=0;i<graph.edges.length;i++){
for (int j=0;j<graph.edges.length;j++){
graph.edges[i][j]=in.nextInt();
}
}
}
public static void printg(MGraph g){
for(int i=0;i<g.n;i++){
System.out.print(g.vertex[i]+" ");
}
System.out.println();
for (int i=0;i<g.n;i++){
for (int j=0;j<g.n;j++){
System.out.print(g.edges[i][j]+" ");
}
System.out.println();
}
}
}
广度优先遍历 邻接矩阵
import java.util.*;
class Graph{
int n;
int e;
String[] vertex;
int[][] edges;
}
public class BfsGraph {
public static void main(String[] args) {
Graph graph=new Graph();
creatGraph(graph);
List<String> res= bfsGraph(graph);
for (int i=0;i<res.size();i++){
System.out.println(res.get(i));
}
}
public static String bfs( Graph g,int start,int[] visitd,StringBuilder sb){
visitd[start]=1;
sb.append(g.vertex[start]);
Queue<Integer> que=new LinkedList<>();
que.add(start);
while (!que.isEmpty()){
int index=que.poll();
for(int i=0;i<g.n;i++){
if(visitd[i]==0 && g.edges[index][i]></