图的深度遍历与广度遍历

图的遍历

1,DFS(深度优先遍历)

    访问起始点 v;  

    若v的第1个邻接点没访问过,深度遍历此邻接点;

    若当前邻接点已访问过,再找v的第2个邻接点重新遍历。

    结果:  

 

代码实现      图的创建输出看https://blog.csdn.net/qq_37937537/article/details/89056696

基于邻接表实现

   /**
     * 深度优先遍历
     */
    public static void DFS(Vertex vertex, ArrayList<Vertex> visited){
        if(visited.size() == vexnum){
            return;
        }
        if(!visited.contains(vertex)){
            visited.add(vertex);
            System.out.print(vertex.data+" ");
            Edge cur = vertex.firstage;
            while(cur != null){
                DFS(getVertex(cur.adhvex),visited);
                cur = cur.next;
            }
        }
    }
    public static void main(String[] args) {
        createGraph();
        outputGraph();
       // BFS();
        System.out.println();
        ArrayList<Vertex> arrayList = new ArrayList<>();
        DFS(vertexs[0],arrayList);
    }
请输入顶点的个数
5
请输入边的条数
7
请输入各顶点
v1
v2
v3
v4
v5
请按‘头节点 尾节点 回车’的形式依次输入边的信息
v1 v4
v1 v2
v2 v5
v3 v2
v3 v5
v4 v3
v4 v5
v1--v4--v2
v2--v5
v3--v2--v5
v4--v3--v5
v5

v1 v4 v3 v2 v5 

2,BFS(广度优先遍历)

在访问了起始点v之后,依次访问 v的邻接点;

然后再依次访问这些顶点中未被访问过的邻接点;

直到所有顶点都被访问过为止。

      

结果为:1,2,3,4,5,6(从1 开始)

Java代码实现

public static void BFS(){
        HashMap<Vertex,Integer> hashMap = new HashMap<>();
        LinkedList<Vertex> queue = new LinkedList<>();
        queue.add(vertexs[0]);
        while(!queue.isEmpty()){
           Vertex s = queue.getFirst();
           System.out.print(s.data+" ");
           hashMap.put(s,1);
           queue.removeFirst();

           Edge cur = s.firstage;
           while (cur !=  null){
               Vertex vertex  = getVertex(cur.adhvex);
               if(!hashMap.containsKey(vertex)){
                   queue.add(vertex);
                   hashMap.put(vertex,1);
               }
               cur= cur.next;
           }
        }
    }
请输入顶点的个数
5
请输入边的条数
7
请输入各顶点
v1
v2
v3
v4
v5
请按‘头节点 尾节点 回车’的形式依次输入边的信息
v1 v4
v1 v2
v2 v5
v3 v2
v3 v5
v4 v3
v4 v5
v1--v4--v2
v2--v5
v3--v2--v5
v4--v3--v5
v5
v1 v4 v2 v3 v5 

 

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值