有向图中,打印出所有的回路(Java

有向图中,打印出所有的回路(Java)


具体思路:利用DFS算法深度遍历图中的每一个节点。在遍历的同时设置一个list,用来存放已经遍历过的点;如果再遍历到这个点(说明形成了回路)的时候就打印出来。

注意点:

  1. 需要记录每一个点“是否被访问过”的状态。
  2. 由于是有向图,所以实际上并不能保证从一个特定的点出发能够遍历到图中所有的点,因此需要从图中每一个点出发将图遍历一遍。
  3. 在遍历不同的节点的时候需要注意将图中点的状态全部恢复

下面是具体代码

最后两个函数sortStringbubbleArray两个函数是没有必要的,是为了让输出更加的美观添加的函数。

import java.io.*;
import java.util.*;
public class Main {
    /*要求:判断一个有向图中是否有回路,并且打印出所有的回路。
    思路:通过修改的DFS算法遍历有向图。
    在遍历的过程中,把遍历到的所有的元素都存储到一个队列里面,然后每次遍历到一个节点的时候就检查一下这个队列;要是队列里面已经有重复的元素
    那就表明已经形成了回路,然后打印出来这个回路;然后中断遍历,回去遍历别的节点。
    */

    private String filename = "";
    //用邻接表来初始化要检查的有向图
    private Map<String,ArrayList<String>> Graph = new HashMap<String, ArrayList<String>>();

    ArrayList POINTS = new ArrayList();

    public void initGraph() throws IOException {

        File file = new File(filename);
        FileInputStream fileInputStream = new FileInputStream(file);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
        String line = null;
        while ((line = bufferedReader.readLine()) != null){
            String[] temp = line.split(",");
            if (!POINTS.contains(temp[0])){
                POINTS.add(temp[0]);
            }
            if (!POINTS
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值