深度优先和广度优先

 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 }
广度优先

广度优先运行结果如下:

原文地址:https://www.cnblogs.com/qinmeizhen/p/6809418.html