学校要选择一个地方作为超市的位置,学校每个有K个部门,每个部门去超市的频率不一样,要求在可以设置的地点中选择一个最优的地点

来源于一次课程设计,课设源码位置:https://github.com/treeandgrass/Algorithm-Course-Design

2.7.1题目描述

学校要选择一个地方作为超市的位置,学校每个有K个部门,每个部门去超市的频率不一样,要求在可以设置的地点中选择一个最优的地点。

1)设计核心算法,计算出超市可选位置和最优位置

2)已图像化界面的方式显示学校超市可选点和最优位置,显示学校超市和部门之间的路径和距离。

2.7.2程序使用说明

Java version:1.8.0_111

IDE:eclipse

直接编译Graph.java,然后运行即可

2.7.3简要分析和设计

算法步骤可以分为如下:

1)将部门和超市之间的通路转化为矩阵的形式,在程序中使用二维数组的形式表示,例如将部门和商店作为节点,然后可以把整个问题抽象成一个加权无向图的问题,A表示图中每个顶点之间的通路。A(i,j)表示点i,j之间的距离

2)使用floyd方法计算超市节点到每个部门之间的最短距离

3)在步骤2)的基础上计算每个超市到所有部门的花费。

Floyd算法伪代码:

输入:权重矩阵W[1...n,1...n],权重为每两个点之间的距离

输出:每两个点之间的最短距离矩阵D[1...n,1...n]

Floyd(W[1...n,1...n])

D<—W

For k<—1  to  n  do

For i <—1  to  n  do

For  j <— 1 to  n  do

D[i,j]=min( D(i,j),D[i,k]+D[k,j] )

Return  D

 

计算超市到各个部门之间的距离使用加法模型。设所有超市的点为P=(p1,p2,...,pk)

所有部门点为S=(s1,s2,....,sn),超市pk到所有部门的代价为Cost(pk),部门到超市的频率为F[1..k,1....n],F(k,i)表示部门i到超市k的频率,则可以得到如下计算式:

 

由上述不走计算出了各个商店到部门之间的距离。使用Floyd方法计算的过程中同时记录下了每两个点之间路径的中间点。然后再图像界面上画出整个图,在将超市和部门之间的路径用红色标识。并且在超市标识旁标识出相应大代价。

2.7.4测试用例

权重矩阵W:{ {0,4,7,5,12},{4,0,5,6,9},

{7,5,0,-1,10},{5,6,-1,0,9},

{12,9,10,9,0}}

超市和部门名字数组:{ "办公区1","超市选址1","超市选址2","办公区2","办公区3"}

超市和部门对应坐标:

{ {50,50},{200,100},{80,400},{300,30},{400,300}}

超市ID,在{1,2}部门ID{0,3,4}

结果:

 

2.7.5源代码

package four.three;

 

import java.awt.Color;

import java.awt.Graphics;

import java.util.ArrayList;

import java.util.HashMap;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

 

/**

 * 无向图

 * @author ym

 *

 */

public class Graph extends JPanel{

 

/**

 * 序列号

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值