zoukankan      html  css  js  c++  java
  • 深度优先和广度优先

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

    广度优先运行结果如下:

  • 相关阅读:
    设计模式之-简单工厂模式
    C# 汉语转拼音
    深入理解DIP、IoC、DI以及IoC容器
    C# 各种帮助类大全
    C# TCP多线程服务器示例
    【AtCoder】AGC004
    【AtCoder】ARC061
    【AtCoder】CODE FESTIVAL 2016 qual A
    【AtCoder】AGC005
    【AtCoder】CODE FESTIVAL 2016 qual B
  • 原文地址:https://www.cnblogs.com/qinmeizhen/p/6809418.html
Copyright © 2011-2022 走看看