1 import java.util.Scanner; 2 import java.util.LinkedList; 3 import java.util.Scanner; 4 import java.util.TreeSet; 5 import java.util.Scanner; 6 public class One { 7 //book[i]=1表示i点已经访问过,a[][]用于存储将要遍历的图,m表示遍历的点数 8 public static int book[]=new int[51],a[][]=new int[51][51],m; 9 public static void f(int cur){//当前所在点 10 book[cur]=1;//标记已经访问过 11 System.out.print(cur+" "); 12 for(int i=1;i<=m;i++){ 13 if(a[cur][i]==1){//如果cur与i相连 14 if(book[i]==0)f(i);//如果i点没有访问,继续从i点遍历下去 15 } 16 } 17 return; 18 } 19 public static void main(String args[]){ 20 Scanner scanner=new Scanner(System.in); 21 System.out.println("请输入遍历个数m:"); 22 m=scanner.nextInt(); 23 //初始化二维矩阵 24 for(int i=1;i<=m;i++){ 25 for(int j=1;j<=m;j++){ 26 if(i==j)a[i][j]=0; 27 else a[i][j]=9999;//9999当作无穷大,表示i、j两点不连接 28 } 29 } 30 System.out.println("请输入无向图点对:");//相连接的点 31 for(int k=1;k<=m;k++){//这里图的边数为m(5) 32 int x,y; 33 x=scanner.nextInt(); 34 y=scanner.nextInt(); 35 a[x][y]=1; 36 a[y][x]=1;//因为是无向图,所以两个都要对称赋值为1 37 } 38 f(1);//从1开始遍历 39 } 40 }
结果:
1 import java.util.Scanner; 2 import java.util.LinkedList; 3 import java.util.Scanner; 4 import java.util.TreeSet; 5 import java.util.Scanner; 6 public class One { 7 public static void main(String args[]){ 8 //book[i]=1表示i点已经访问过,a[][]用于存储将要遍历的图,m表示遍历的点数 9 int book[]=new int[51],a[][]=new int[51][51],m; 10 Scanner scanner=new Scanner(System.in); 11 System.out.println("请输入遍历个数m:"); 12 m=scanner.nextInt(); 13 //初始化二维矩阵 14 for(int i=1;i<=m;i++){ 15 for(int j=1;j<=m;j++){ 16 if(i==j)a[i][j]=0; 17 else a[i][j]=9999;//9999当作无穷大,表示i、j两点不连接 18 } 19 } 20 System.out.println("请输入无向图点对:");//相连接的点 21 for(int k=1;k<=m;k++){//这里图的边数为m(5) 22 int x,y; 23 x=scanner.nextInt(); 24 y=scanner.nextInt(); 25 a[x][y]=1; 26 a[y][x]=1;//因为是无向图,所以两个都要对称赋值为1 27 } 28 29 //用于广度优先遍历的链表 30 LinkedList<Integer> list=new LinkedList<Integer>(); 31 list.add(1);//初始化链表(从第一点1开始) 32 book[1]=1; 33 System.out.print(1+" "); 34 while(!list.isEmpty()){ 35 for(int i=1;i<=m;i++){ 36 if(a[list.getFirst()][i]==1&&book[i]==0){ 37 System.out.print(i+" "); 38 book[i]=1; 39 list.add(i); 40 } 41 } 42 list.removeFirst();//扩展完一个点之后就删除该点 43 } 44 45 } 46 }
广度优先运行结果如下: