数据结构-图-路径长度计算(Java语言)

 

详细的代码可见github:

https://github.com/AbitGo/myClassWork/tree/master/workspace_ds

如何图的实现路径长度

package com.company.ch6;

public class Exp6_2 {
    //访问标志数组
    private boolean[] visited;
    //辅助变量,在历遍中用于记录从起始点触发的路径长度
    private int i = 0;
    private boolean find = false;

    public void findPath(IGraph g, int u, int v, int k) throws Exception {
        visited = new boolean[g.getVexNum()];
        for (int i = 0; i < g.getVexNum(); i++) {
            visited[i] = false;
        }
        find_DFS(g, u, v, k);

        if (find) {
            System.out.println(g.getVex(u) + "和" + g.getVex(v) + "之间存在长度为" + k + "的简单路径");
        } else {
            System.out.println(g.getVex(u) + "和" + g.getVex(v) + "之间不存在长度为" + k + "的简单路径");
        }
    }

    public void find_DFS(IGraph g, int u, int v, int k) throws Exception {
        //路径长度等于k时候
        //为什么有u==v的时候因为递归调用
        if (i == k && u == v){
            find = true;
        }else if(!find){
            //访问过后进行true赋值
            visited[u] = true;
            for(int w = g.firstAdjVex(u);w>=0;w=g.nextAdjVex(u,w)){
                //当当前节点没有访问过的时候
                if(!visited[w]){
                    if(i

测试结果:

"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" 
A和F之间存在长度为3的简单路径

 

你可能感兴趣的:(数据结构与算法,java,数据结构)