最少转机——图的广度优先遍历

Posted 失败girl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最少转机——图的广度优先遍历相关的知识,希望对你有一定的参考价值。

描述:如图(无向图),5个城市,7调路线,用广度优先求从城市1到达城市5需要转机最少次数。

 1 import java.util.Scanner;
 2 import java.util.LinkedList;
 3 public class One {
 4     public static void main(String args[]){
 5         int m,r,s,e;
 6         Scanner scanner=new Scanner(System.in);
 7         System.out.println("请输入城市的数目、航线数目、起点城市、目的城市:");
 8         m=scanner.nextInt();
 9         r=scanner.nextInt();
10         s=scanner.nextInt();
11         e=scanner.nextInt();
12         int a[][]=new int[m+1][m+1];//用于存储路线
13         int book[]=new int[m+1];//用于标记已经走过的城市
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=0;k<r;k++){//设置直达航线
22             int x=scanner.nextInt();
23             int y=scanner.nextInt();
24             a[x][y]=1;
25             a[y][x]=1;
26         }
27         //用于扩展搜索的链表
28         LinkedList<Note> list=new LinkedList<Note>();
29         list.add(new Note(s,0));//初始化链表(把起始城市放入链表)
30         book[s]=1;//标记第一点走过
31         while(!list.isEmpty()){
32             for(int i=1;i<=m;i++){
33                 if(a[list.getFirst().n][i]!=9999&&book[i]==0){
34                     book[i]=1;
35                     list.add(new Note(i,list.getFirst().d+1));
36                 }
37             }
38             if(book[e]==1){//到达终点
39                 break;
40             }
41             if(list.getFirst().n!=5){
42             list.removeFirst();
43             }
44         }
45         System.out.println(list.getLast().d);
46     }
47 }
48 class Note{
49     int n,d;
50     Note(int n,int d){
51         this.n=n;
52         this.d=d;
53     }
54 }
无向图广度优先

结果如下:

以上是关于最少转机——图的广度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章

Graph-BFS-Fly-图的广度优先遍历-最小转机问题

c语言图的遍历,邻接表存储,深度,广度优先遍历

图的深度优先遍历DFS和广度优先遍历BFS(邻接矩阵存储)超详细完整代码进阶版

图的深度/广度优先遍历C语言程序

数据结构C语言版 图的广度优先遍历和深度优先遍历 急急急 会查重

C语言实现图的广度优先搜索遍历算法