广度优先搜索(BFS)——含最短路径问题

package chart;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;

public class Bfs {
    static LinkedList queue=new LinkedList();//相当于一个队列
    static ArrayList list=new ArrayList();
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int [][]l=new int[n][n];//邻接矩阵
        int []a=new int[n];
        int index=0;
        int []visted=new int[n];
        //char []color=new char[n];//w表示还未被访问,g表示已访问过,b表示以该节点为父节点的节点已全部访问完
        int []d=new int[n];//记录源点到指定点的距离
        String []p=new String[n];//记录父节点
        for(int i=0;i             for(int j=0;j                 l[i][j]=sc.nextInt();
            }
        }
        bfs(l,0,visted,d,p);
        System.out.println("源点到其余点的最短路径长度为:");
        for(int i=0;i             System.out.print(d[i]+" ");
        }
        System.out.println();
        Iterator it=list.iterator();
        while(it.hasNext()) {
            a[index++]=(int) it.next();
        }
        for(int i=0;i             if(i!=a.length-1)
                 System.out.print(a[i]+" ");
            else
                System.out.print(a[i]);
        }
        System.out.println();
    }
public static void bfs(int l[][],int s,int visted[],int d[],String p[]) {
    //初始化为s到其余节点不可达,且其他节点未被访问
    for(int j=0;j         if(j!=s) {
            //color[j]='w';
            visted[j]=0;
            d[j]=Integer.MAX_VALUE;
            p[j]=null;
        }
    }
    d[s]=0;
    p[s]=null;
    //color[s]='g';
    visted[s]=1;
    list.add(s);
    queue.add(s);
    while(!queue.isEmpty()) {
        int now=(int) queue.getFirst();//记录出队的第一个元素
        queue.removeFirst();//出队
        for(int j=0;j             if(visted[j]==0&&l[now][j]!=0) {
                list.add(j);//将该节点加入路径中
                visted[j]=1;
                d[j]=d[now]+1;
                p[j]=Integer.toString(now);
                queue.addLast(j);
            }
        }
        visted[now]=1;
    }
}
}
 

你可能感兴趣的:(算法小白的进阶之路)