算法三级项目 管道铺设系统(javaweb+mvc+idea+百度地图+prim)

本项目需要开发一个管线铺设辅助系统,以我校西校区为例,在里仁学院教学楼、学生公寓、学生食堂、第一、二、三、四教学楼、材料学院、电气学院、理学院、艺术学院、经管学院、西里西亚学院和信息学院之间铺设输水管道,设计算法并实现使铺设的输水管道距离最短从文本中读取数据、显示最佳铺设方案,以及绘制最佳方案的简单示意图等功能。

由于此项目为合作完成,我只写了prim算法,所以只上传有关prim的部分。

运行结果

db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/map?userSSL=ture&useUnicode=true&characterEncoding=utf-8
username=root
password=root

index.jsp

<%@ page import="domain.Buildings" %>
<%@ page import="java.util.List" %>
<%@ page import="com.google.gson.Gson" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="utf-8">
    <title>管道铺设辅助系统</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <style>
        html{height:100%}
        body{height:100%;margin:0px;padding:0px}
        #container {
            overflow: hidden;
            width: 100%;
            height: 90%;
            margin: 0;
            font-family: "微软雅黑";
        }
    </style>
    <script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=40ZSZGnM6HRUM06RKMsnWOcyUsmTed3Z"></script>
</head>
<body>
<div id="container"></div>
<div id="r-result">
    <form action="/PrimeServlet" method="get">
        <p>起点:<input type="text" name="point"></p>
        <input type="submit" value="提交">
    </form>
    <input type="button" onclick="start();" value="kruskal" />
    <input type="button" onclick="startprime();" value="prim" />
<%--    <a class="btn float-buttons waves-effect waves-button waves-float" id="a" href="/PrimeServlet">--%>
<%--        primeBuildings--%>
<%--    </a>--%>
</div>
</body>
</html>
<script>
    var map = new BMapGL.Map('container'); // 创建Map实例
    map.centerAndZoom(new BMapGL.Point(119.533143,39.912459), 18); // 初始化地图,设置中心点坐标和地图级别
    map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放

    var buildingsList = [];
    <% List<Buildings> buildingList = (List<Buildings>) request.getAttribute("buildings"); %>
    <% if (buildingList != null) { %>
    buildingsList = <%= new Gson().toJson(buildingList) %>;
    <% } %>

    var route=[];
    <% List<String> routes = (List<String>) request.getAttribute("route"); %>
    <% if (routes != null) { %>
    route = <%= new Gson().toJson(routes) %>;
    <% } %>

    var path = [];
    for (var i1 = 0; i1 < route.length; i1++) {
        var point2 = {
            'lng': parseFloat(route[i1].split(",")[0]),
            'lat': parseFloat(route[i1].split(",")[1])
        };
        path.push(point2);
    }

    function change(){
        var points = [];
        var labels = [];
        for (var i = 0; i < buildingsList.length; i++) {
            var building = buildingsList[i];
            var address1 = building.address;
            var name = building.name;
            var address=address1.split(",");
            var point = new BMapGL.Point(parseFloat(address[0]),parseFloat(address[1]));
            points.push(point);
            var label = new BMapGL.Label(name, {
                position: point,
                offset: new BMapGL.Size(0, 0)
            });
            labels.push(label);
        }

        for (var j = 0; j < labels.length; j++) {
            map.addOverlay(labels[j]);
        }
    }
    function start(){
        change();

        for (var ij=0;ij<path.length;) {
            var coors = [
                {'lat': parseFloat(path[ij].lat), 'lng': parseFloat(path[ij].lng)},
                {'lat': parseFloat(path[ij + 1].lat), 'lng': parseFloat(path[ij + 1].lng)}
            ];

            var polyline = new BMapGL.Polyline(coors);

            map.addOverlay(polyline);

            ij += 2;
        }
    }

    var addresses=[];
    var point=[];
    <% int []point=(int[]) request.getAttribute("point"); %>
    <% if (point != null) { %>
    point = <%= new Gson().toJson(point) %>;
    <% } %>

    function startprime(){

        var ans=[];

        for(var i=0;i<point.length;i++){
            for(var j=0;j<buildingsList.length;j++){
                var abstract_name=buildingsList[j].abstract_name;
                if(point[i]==abstract_name) {
                    var address = buildingsList[j].address;

                    var an = buildingsList[j].abstract_name;
                    break;
                }
            }
            ans.push(an);
            addresses.push(address);
        }
        var lng=[];
        var lat=[];
        for (var i=0;i<addresses.length;i++) {
            const a = addresses[i].split(",");
            lng[i] = a[0];
            lat[i] = a[1];
        }

        for (var i=0;i<addresses.length;i++){
            var point1 = new BMapGL.Point(lng[i], lat[i]);

            var marker = new BMapGL.Marker(point1);        // 创建标注
            map.addOverlay(marker);                     // 将标注添加到地图中
        }
        for (var i=1;i<addresses.length;i++){

            // window.alert(lng[i], lat[i]);
            var polyline = new BMapGL.Polyline([
                new BMapGL.Point(lng[i-1], lat[i-1]),
                new BMapGL.Point(lng[i], lat[i])
            ], {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
            map.addOverlay(polyline);
        }

    }
</script>
PrimeServlet
package servlet;

import domain.Buildings;
import domain.Edata;
import service.Kruskalimp;
import service.Primeimpl1;
import service.buildingserviceimp;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/PrimeServlet")
public class PrimeServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        buildingserviceimp buildings = new buildingserviceimp();
        List<Buildings> buildingsList = new ArrayList<Buildings>();
        buildingsList = buildings.getbuildings();
        request.setAttribute("buildings", buildingsList);
        String v0=request.getParameter("point");
        int v=Integer.parseInt(v0);
        Primeimpl1 prime = new Primeimpl1();
        int []point=prime.Prim(v);
        request.setAttribute("point",point);
        request.getRequestDispatcher("/index.jsp").forward(request, response);
    }
}
Primeimpl1
package service;

import dao.Filedao;
import dao.Filedaoimp;

import java.io.IOException;

public class Primeimpl1 {
    Filedao Filedaoimp=new Filedaoimp();
    int[][] number;
    {
        try {
            number = Filedaoimp.read();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    int [][]edge=number; //存放图中边
    int vertexNum=14;
    boolean visited[] = new boolean[vertexNum];//是否已经经过
    int []point=new int[vertexNum];//存放路径顶点
    int MAX = Integer.MAX_VALUE;
    int []lowcost=new int[vertexNum];//到已经经过的点集合的最短距离
    int total=0;//用来记录权值和
    public int[] Prim(int v) throws IOException {
        int i,j,k,n;
        lowcost[v]=0;
        visited[v] = true;
        point[0]=v;
        for(i=0;i<vertexNum;i++){
            lowcost[i]=edge[v][i];
        }
        for(n=1;n<vertexNum;n++){
            int min=MAX;
            int index=-1;
            for(i=0;i<vertexNum;i++){
                if(!visited[i]&&lowcost[i]<min){
                    min=lowcost[i];
                    index=i;
                }
            }
            if(index==-1) System.out.println("error");
            total+=min;
            lowcost[index]=0;
            visited[index]=true;
            point[n]=index;
            //更新lowcost
            for(j=0;j<vertexNum;j++) {
                if(edge[index][j]<lowcost[j]) {
                    lowcost[j]=edge[index][j];
                }
            }
        }
//        for (i=0;i<point.length;i++) {
//            System.out.println(point[i]);
//        }
//        System.out.println(total);
        Filedaoimp.writefile(point,total);
        return point;
    }
}








buildingservice
package service;

import java.util.List;
import domain.*;

public interface buildingservice {
    public List<Buildings> getbuildings();
}
buildingserviceimp
package service;

import java.sql.Connection;
import java.util.List;

import dao.BaseDao;
import dao.Buildingsdao;
import dao.Buildingsdaoimp;
import domain.*;

public class buildingserviceimp implements buildingservice {
    private Buildingsdao buildingdao;

    public buildingserviceimp() {
        buildingdao = new Buildingsdaoimp();
    }
    public List<Buildings>getbuildings(){
        Connection connection = null;
        List<Buildings> buildinglist = null;
        try {
            connection = BaseDao.getConnection();
            buildinglist = buildingdao.getBuilding(connection);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            BaseDao.closeResource(connection, null, null);
        }
        return buildinglist;
    }
}
Buildings
package domain;

public class Buildings {
    String name;
    String address;
    int abstract_name;

    public int getAbstract_name() {
        return abstract_name;
    }

    public void setAbstract_name(int abstract_name) {
        this.abstract_name = abstract_name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
BaseDao
package dao;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class BaseDao {
    //静态代码块,在类加载的时候执行
    static {
        init();
    }

    private static String driver;
    private static String url;
    private static String username;
    private static String password;

    //初始化连接参数,从配置文件里获得
    public static void init(){
        Properties properties = new Properties();
        String configFile = "db.properties";
        InputStream inputStream = dao.BaseDao.class.getClassLoader().getResourceAsStream(configFile);

        try {
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

        driver=properties.getProperty("driver");
        url=properties.getProperty("url");
        username=properties.getProperty("username");
        password=properties.getProperty("password");
    }

    /**
     * 获取数据库连接
     * @return
     */
    public static Connection getConnection() {
        Connection connection =null;
        try {
            Class.forName(driver);
            connection= DriverManager.getConnection(url,username,password);
        }catch (Exception e){
            e.printStackTrace();
        }

        return connection;
    }


    /**
     * 编写查询公共类
     */
    public static ResultSet execute(Connection connection, PreparedStatement pstm, ResultSet rs, String sql, Object[] params)throws Exception{
        pstm = connection.prepareStatement(sql);
        for (int i = 0; i < params.length; i++) {
            pstm.setObject(i+1,params[i]);
        }
        rs=pstm.executeQuery();
        return rs;
    }

    /**
     * 编写增删改公共类
     */
    public static int execute(Connection connection,PreparedStatement pstm,
                              String sql,Object[] params) throws Exception{
        int updateRows = 0;
        pstm = connection.prepareStatement(sql);
        for(int i = 0; i < params.length; i++){
            pstm.setObject(i+1, params[i]);
        }
        updateRows = pstm.executeUpdate();
        return updateRows;
    }

    /**
     * 释放资源
     */
    public static boolean closeResource(Connection connection,PreparedStatement pstm,ResultSet rs){
        boolean flag = true;
        if(rs != null){
            try {
                rs.close();
                rs = null;//GC回收
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                flag = false;
            }
        }
        if(pstm != null){
            try {
                pstm.close();
                pstm = null;//GC回收
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                flag = false;
            }
        }
        if(connection != null){
            try {
                connection.close();
                connection = null;//GC回收
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                flag = false;
            }
        }

        return flag;
    }
}
Buildingsdao
package dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import domain.*;

public interface Buildingsdao {
    public List<Buildings> getBuilding(Connection connection) throws Exception;
    public List<String> getabsname(Connection connection) throws SQLException;
}
 Buildingsdaoimp
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import domain.*;

public class Buildingsdaoimp implements Buildingsdao {
    public List<Buildings> getBuilding(Connection connection) throws Exception {
        PreparedStatement pstm = null;
        ResultSet rs = null;
        List<Buildings> buildingList = new ArrayList<Buildings>();
        if (connection != null) {
            String sql = "select name,address,abstract_name from map";
            pstm = connection.prepareStatement(sql);
            rs = pstm.executeQuery();
            while (rs.next()) {
                Buildings _b = new Buildings();
                _b.setName(rs.getString("name"));
                _b.setAddress(rs.getString("address"));
                _b.setAbstract_name(rs.getInt("abstract_name"));
                buildingList.add(_b);
            }
            BaseDao.closeResource(null, pstm, rs);
        }
        return buildingList;
    }

    public List<String> getabsname(Connection connection) throws SQLException {
        PreparedStatement pstm = null;
        ResultSet rs = null;
        List<String> absname = new ArrayList<String>();
        if (connection != null) {
            String sql = "select abstract_name from map";
            pstm = connection.prepareStatement(sql);
            rs = pstm.executeQuery();
            while (rs.next()) {
                String _b = rs.getString("abstract_name");
                absname.add(_b);
            }
            BaseDao.closeResource(null, pstm, rs);
        }
        return absname;
    }
}
Filedao
public interface Filedao {
    public int[][] read() throws IOException;
    public void writefile(int[]point,int total) throws IOException;
}
Filedaoimp
public class Filedaoimp implements Filedao {
    public int [][] read() throws IOException {
            String pathname = "D:\\文档\\Tencent Files\\2247594359\\FileRecv\\input(1).txt";
            File filename = new File(pathname);
            BufferedReader bf = new BufferedReader(new FileReader(filename));
            String textLine = new String();
            String str = new String();
            while((textLine = bf.readLine()) != null) {//每次读取一行
                str += textLine + ",";//每读取一行就用逗号隔开
            }
            String[] numbers = str.split(",");//根据逗号把每行分别存入numbers中
            int[][] number = new int[14][14];//矩阵数组
            String[] stmp = null;
            for(int i = 0; i < 14; i++) {
                stmp = numbers[i].split(" ");//把每一行的数字进一步分离
                for(int j = 0; j < 14; j++) {
                    number[i][j] = Integer.parseInt(stmp[j]);
                }
            }
            for(int i = 0; i < 14; i++) {
                for(int j = 0; j < 14; j++) {
                    System.out.print(number[i][j]+"	");
                }
                System.out.print("\n");
            }
            bf.close();
            return number;
        }

    @Override
    public void writefile(int[]point,int total) throws IOException {
        File outfile = new File("D:\\桌面\\output.txt");
        if (outfile.exists()) {
            System.out.println("文件已经存在");
            System.exit(1);
        }
        PrintWriter out = new PrintWriter(outfile, "UTF-8");
//        out.println("最小生成树的邻接矩阵为:");
//        for(int i=0;i<matrix.length;i++){
//            for (int j=0;j<matrix[0].length;j++){
//                out.print(matrix[i][j]);
//            }
//            out.print("\n");
//        }
        out.println("最小生成树的路径为:");
        for(int i=0;i<point.length-1;i++)
            out.print(point[i]+"->");
        out.println(point[13]);
        out.print("最小生成树的长度为:"+total);
        out.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值