在今天在网上搜索了一下最短路径的代码并且问别的同学,然后我和我的cp完成了这项功能的实现,但是还是不太完整。
部分代码如下:
因为没用sevlet 所以就在jsp文件中写了。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <%@ page import="Util.util" %> <jsp:useBean id="util" class="Util.util"></jsp:useBean> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1> 起点与终点途径站点</h1> </body> <body> <table border="1" align="center"> <tr> <th>1.经历站点个数</th> <th>2.地铁站名</th> </tr> <% //计算输入的起点与终点之间的站点数与换乘的最短路径 String station_name=request.getParameter("station_name"); String stop_station=request.getParameter("stop_station"); Connection connection = util.getConnection(); PreparedStatement preparedStatement = null; ResultSet rs = null; try{ String sql="WITH RECURSIVE transfer (start_station, stop_station, stops, path) AS (\r\n" + " SELECT station_name, next_station, 1, CAST(CONCAT(line_name,station_name , '->', line_name,next_station) AS CHAR(1000))\r\n" + " FROM bj_subway WHERE station_name = ?\r\n" + " UNION ALL\r\n" + " SELECT p.start_station, e.next_station, stops + 1, CONCAT(p.path, '->', e.line_name, e.next_station)\r\n" + " FROM transfer p\r\n" + " JOIN bj_subway e\r\n" + " ON p.stop_station = e.station_name AND (INSTR(p.path, e.next_station) = 0)\r\n" + ")\r\n" + "SELECT * FROM transfer WHERE stop_station =? limit 2 "; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1 ,station_name); preparedStatement.setString(2 ,stop_station); rs = preparedStatement.executeQuery(); while(rs.next()){ %> <tr> <td><%=rs.getString("stops") %></td> <td><%=rs.getString("path") %></td> </tr> <% } }catch (Exception ex){ ex.printStackTrace(); } finally{ util.close(rs,preparedStatement,connection); } %> </table> </body> </html>