0 0

广度全部路径问题5

以下代码如查询"New York"-"Denver"只能查询出一条路径,请教如何能查出全部可行路径?

我想要的是查询出New York-Denver、New York-Chicago-Denver全部路径,而不是一条,请教各位了!


// Find connections using a depth-first search.
import java.util.*;
import java.io.*;
// Flight information.
class FlightInfo {
  String from;
  String to;
  int distance;
  //int Path[MAX_];
  boolean skip; // used in backtracking
  FlightInfo(String f, String t, int d) {
    from = f;
    to = t;
    distance = d;
    skip = false;
  }
}
class Depth {
  final int MAX = 100;
  // This array holds the flight information.
  FlightInfo flights[] = new FlightInfo[MAX];
  int numFlights = 0; // number of entries in flight array
  Stack btStack = new Stack(); // backtrack stack
  public static void main(String args[])
  {
  
    String to, from;
    Depth ob = new Depth();
    BufferedReader br = new
      BufferedReader(new InputStreamReader(System.in));

    ob.setup();
    try {
      System.out.print("From? ");
      from = br.readLine();
      System.out.print("To? ");
      to = br.readLine();
      ob.isflight(from, to);
      if(ob.btStack.size() != 0)
        ob.route(to);
    } catch (IOException exc) {
      System.out.println("Error on input.");
    }
  }

  // Initialize the flight database.
  void setup()
  {
    addFlight("New York", "Chicago", 900);
    addFlight("Chicago", "Denver", 1000);
    addFlight("New York", "Toronto", 500);
    addFlight("New York", "Denver", 1800);
    addFlight("Toronto", "Calgary", 1700);
    addFlight("Toronto", "Los Angeles", 2500);
    addFlight("Toronto", "Chicago", 500);
    addFlight("Denver", "Urbana", 1000);
    addFlight("Denver", "Houston", 1000);
    addFlight("Houston", "Los Angeles", 1500);
    addFlight("Denver", "Los Angeles", 1000);
  }

  // Put flights into the database.
  void addFlight(String from, String to, int dist)
  {

    if(numFlights < MAX) {
      flights[numFlights] =
        new FlightInfo(from, to, dist);
      numFlights++;
    }
    else System.out.println("Flight database full.\n");
  }
  // Show the route and total distance.
  void route(String to)
  {
    Stack rev = new Stack();
    int dist = 0;
    FlightInfo f;
    int num = btStack.size();
    // Reverse the stack to display route.
    for(int i=0; i < num; i++)
      rev.push(btStack.pop());
    for(int i=0; i < num; i++) {
      f = (FlightInfo) rev.pop();
      System.out.print(f.from + " to ");
      dist += f.distance;
    }
    System.out.println(to);
    System.out.println("Distance is " + dist);
  }
  /* If there is a flight between from and to,
     return the distance of flight;
     otherwise, return 0. */
  int match(String from, String to)
  {
    for(int i=numFlights-1; i > -1; i--) {
      if(flights[i].from.equals(from) &&
         flights[i].to.equals(to) &&
         !flights[i].skip)
      {
        flights[i].skip = true; // prevent reuse
        return flights[i].distance;
      }
    }
    return 0; // not found
  }

  // Given from, find any connection.
  FlightInfo find(String from)
  {
    for(int i=0; i < numFlights; i++) {
      if(flights[i].from.equals(from) &&
         !flights[i].skip)
      {
        FlightInfo f = new FlightInfo(flights[i].from,
                             flights[i].to,
                             flights[i].distance);
        flights[i].skip = true; // prevent reuse

        return f;
      }
    }
    return null;
  }

  // Determine if there is a route between from and to.
  void isflight(String from, String to)
  {
    int dist;
    FlightInfo f;
    // See if at destination.
    dist = match(from, to);
    if(dist != 0) {
    //System.out.println(dist);
      btStack.push(new FlightInfo(from, to, dist));
     
      return;
    }
    // Try another connection.
    f = find(from);
    if(f != null) {
      btStack.push(new FlightInfo(from, to, f.distance));
      isflight(f.to, to);
    }
    else if(btStack.size() > 0) {
      // Backtrack and try another connection.
      f = (FlightInfo) btStack.pop();
      isflight(f.from, f.to);
    }
  }
}
2009年3月16日 17:33

1个答案 按时间排序 按投票排序

0 0

-@-
全部可行路径?
最简单的改法 将是否走过这条路经得那个标志位去掉 然后就枚举就好了

2009年3月19日 13:39

相关推荐

    基于广度优先搜索的最短路径问题

    本文将深入探讨如何利用广度优先搜索(BFS)解决最短路径问题,以及如何结合文件读取技术实现这一过程。在给定的标题“基于广度优先搜索的最短路径问题”和描述中,我们可以提取以下几个关键知识点: 1. **最短路径...

    广度优先搜索求最短路径

    参考中国大学MOOC,计算机算法与程序设计,5.2节内容,实现Python广度优先求最短路径。课程该章节没有课件,我手敲的代码调试好了,供大家一起学习!!!

    图的深度广度遍历,关键路径和最短路径

    总结以上,图的深度优先和广度优先遍历是基础的图遍历方法,关键路径和最短路径算法则用于解决实际问题,如项目管理、网络优化等。邻接表法作为一种高效的数据结构,有助于我们更好地操作和理解图的性质。

    广度遍历求最短路径

    存储结构:邻接表; 实现功能:广度遍历求最短路径; 博客中的代码实现

    广度优先搜索遍历路径

    - **最短路径问题**:在无权图中,BFS可以找到两节点间的最短路径,因为它是按层次遍历的,所以到达目标节点的步数最少。 - **判断连通性**:通过BFS,可以判断一个图是否是连通的,即从任一节点出发能否访问到所有...

    广度优先搜索(BFS)路径规划算法(Python实现)

    基于广度优先搜索的路径规划是一种常用的算法,用于在图或者树结构中寻找从起点到目标点的最短路径。这种算法通过逐层扩展搜索的方式,从起点开始,逐步向外扩展,直到找到目标点或者遍历完所有可能的路径。通过使用...

    双向广度优先搜索(BBFS)路径规划算法(Python实现)

    基于双向广度优先搜索的路径规划算法是一种常用的图搜索算法,用于寻找两个节点之间的最短路径。该算法从起始节点和目标节点同时进行搜索,通过不断扩展搜索范围,直到两个搜索队列相遇或找到最短路径为止。 核心...

    数据结构 广度 深度 拓扑 最短路径 最小生成树

    在本主题中,我们将深入探讨“广度优先搜索”(BFS)、“深度优先搜索”(DFS)、“拓扑排序”、“最短路径算法”以及“最小生成树”这五个关键知识点,并以C语言作为实现工具。 首先,让我们从广度优先搜索开始。...

    基于深度优先搜索和广度优先搜索的最短路径问题

    该代码解决了最短路径问题(给定带权有向图G=(V, E),对任意顶点vi,vj∈V(i≠j),求顶点vi到顶点vj的最短路径。) 代码使用了广度优先搜索和深度优先搜索;枚举法、回溯法来解决最短路径问题,其中结果存储使用...

    java 深度优先遍历、广度优先遍历、最短路径、最小生成树

    本文将深入探讨Java中实现的四个核心图算法:深度优先遍历(DFS)、广度优先遍历(BFS)、最短路径算法以及最小生成树算法。 首先,**深度优先遍历(DFS)**是一种用于遍历或搜索树或图的算法。它从根节点开始,尽...

    通过广度优先遍历解决八数码问题

    通过广度优先遍历算法,我们可以解决八数码问题,找到最短的解决路径。此方法可以广泛应用于各种搜索问题的解决。 知识点总结: 1. 广度优先遍历算法的基本思想 2. 八数码问题的定义和解决方法 3. 使用队列数据...

    用广度优先算法求是否存在从vi到vj的路径

    用广度优先算法求是否存在从vi到vj的路径

    求两点之间的所有路径(广度优先与回溯法结合)

    本程序很好的解决了两点之间的所有路径问题,无向图、有向图均可。采用广度优先算法和回溯法的结合,将最终结果存放在一个动态二维向量中。并将其打印出来(打印出顺序经过的结点)。运行环境为visual studio 2005或...

    广度优先搜索解决迷宫问题_迷宫问题_

    在给定的标题"广度优先搜索解决迷宫问题"中,重点在于使用广度优先搜索(BFS)算法来解决这个问题。BFS是一种遍历或搜索树或图的方法,其基本思想是从根节点开始,沿着树的宽度进行探索,直到找到目标节点。在迷宫...

    图的遍历、最短路径、最小生成树

    图的遍历、最短路径和最小生成树是图论中的经典问题,它们在很多领域如网络设计、路由算法、社交网络分析等都有广泛应用。下面我们将深入探讨这些概念。 首先,**图的遍历** 是指在图中按照特定顺序访问每个顶点的...

    北邮复试_2019_树的某两个节点的最短路径(广度优先算法)

    对二叉树,计算任意两个结点的最短路径长度。 输入 第一行输入测试数据组数T 第二行输入n,m 。n代表结点的个数,m代表要查询的数据组数 接下来n行,每行输入两个数,代表1~n结点的孩子结点,如果没有孩子结点则输入-...

    python广度优先搜索得到两点间最短路径

    广度优先搜索是一种强大的工具,用于解决图论中的许多问题,特别是寻找无权图中最短路径的问题。通过本篇文章,我们不仅了解了广度优先搜索的基本原理和步骤,而且还通过具体的代码示例展示了如何在Python中实现这一...

    多路径匹配追踪广度优先(MMP_BF)MATLAB代码

    多路径匹配追踪 广度优先(MMP_BF),该方式搜索最优原子支撑集的方式和OMP类有些许不同,程序中采用结构体来保存每个节点的各项信息,对理解MMP_BF有很大帮助

    基于蚁群算法+广度优先搜索求解迷宫最优路径问题python实现源码+exe执行程序(课程期末大作业).zip

    基于蚁群算法+广度优先搜索求解迷宫最优路径问题python实现源码+exe执行程序(课程期末大作业).zip 该项目属于个人的期末课程大作业、经导师的精心指导与严格评审获得高分通过的设计项目。主要针对计算机相关专业的...

    【三维路径规划】基于matlab广度优先搜索算法无人机三维路径规划【含Matlab源码 270期】.zip

    在本资源中,我们关注的是一个使用MATLAB实现的三维路径规划问题,特别是针对无人机的路径规划。这个项目采用了一种名为广度优先搜索(BFS)的算法,这是一种在图论和计算机科学中广泛使用的搜索策略。接下来,我们...

Global site tag (gtag.js) - Google Analytics