资源简介
用无向网表示校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。
基本要求:
① 查询任意景点的相关信息;
② 查询图中任意两个景点间的最短路径。
③ 查询图中任意两个景点间的所有路径。
④ 增加、删除、更新有关景点和道路的信息。
(选作)* 求多个景点的最佳(最短)游览路径。
带图形界面,动态标记路线,95分的课设

代码片段和文件信息
package com.schoolguider.algorithms;
import java.util.ArrayList;
import com.schoolguider.components.Node;
import com.schoolguider.utility.Manager;
/**
* 双调欧几里得旅行商问题
*
* @author xing
*
*/
public class TSP {
/**
* 用来获取结点和边的管理类
*/
private Manager manager;
/**
* 景点的个数
*/
private int num = 0;
/**
* 存储最短路径
*/
private double d[][];
/**
* 存储任意两个结点之间的直线距离
*/
private double p[][];
/**
* 存储结点的数组
*/
private TSPNode[] tspNodeArray;
/**
* 存储路径
*/
private int kay[][];
public TSP(Manager manager) {
this.manager = manager;
init();
qsort(1 num);
getAllDis();
}
/**
* 初始化数据,为算法做准备
*/
private void init() {
ArrayList nodeList = manager.getNodeList();
num = nodeList.size();
tspNodeArray = new TSPNode[num + 1];
d = new double[num + 1][num + 1];
p = new double[num + 1][num + 1];
kay = new int[num + 1][num + 1];
/*
* 构造结点数组
*/
for (int i = 1; i <= num; i++) {
Node node = nodeList.get(i-1);
int x = node.getX();
int y = node.getY();
tspNodeArray[i] = new TSPNode(x y);
}
getAllDis();
}
/**
* 计算两点之间的直线距离
*
* @param x1
* @param y1
* @param x2
* @param y2
* @return
*/
private double getDistance(int x1 int y1 int x2 int y2) {
int x = (x1 - x2) * (x1 - x2);
int y = (y1 - y2) * (y1 - y2);
return Math.sqrt(x + y);
}
/**
* 计算所有的道路的长度
*/
private void getAllDis() {
for (int i = 1; i < num; i++)
for (int j = i + 1; j <= num; j++)
p[i][j] = p[j][i] = getDistance(tspNodeArray[i].getX()
tspNodeArray[i].getY() tspNodeArray[j].getX()
tspNodeArray[j].getY());
}
/**
* 快速排序的算法
*
* @param l
* @param r
*/
private void qsort(int l int r) {
/*
* 利用移位操作获取终点坐标
*/
int i = l j = r mid = tspNodeArray[(i + j) >> 1].getX();
while (i < j) {
while (tspNodeArray[i].getX() < mid)
i++;
while (mid < tspNodeArray[j].getX())
j--;
if (i <= j) {
/*
* 交换两个结点的x坐标和y坐标
*/
swap(tspNodeArray[i].getX() tspNodeArray[j].getX());
swap(tspNodeArray[i].getY() tspNodeArray[j].getY());
i++;
j--;
}
}
/*
* 将原来的数组分为两部分继续递归
*/
if (l < j)
qsort(l j);
if (i < r)
qsort(i r);
}
/**
* 交换两个数的值
*
* @param x
* @param y
*/
private void swap(int x int y) {
int temp = x;
x = y;
y = temp;
}
/**
* 动态规划计算最短路径
*/
public double DP() {
d[1][2] = p[1][2];// 最小的子问题
for (int j = 3; j <= num; j++) {
// i=1时的情况
for (int i = 1; i < j - 1; i++) {
d[i][j] = d[i][j - 1] + p[j - 1][j];
kay[i][j] = j - 1;
}
// i=j-1的情况
d[j - 1][j] = d[1][j - 1] + p[1][j];// 先设初值为kay=1时的值
kay[j - 1][j] = 1;
/*
* 从头到尾进行遍历
*/
for (int k = 1; k < j - 1; k++) {
double q = d[k][j - 1] + p[k][j];
if (q < d[j - 1][j]) {
d[j - 1][j] = q;
kay[j - 1][j] = k
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-01-19 21:07 SchoolGuider3.1\
文件 402 2016-01-19 21:07 SchoolGuider3.1\.classpath
文件 391 2016-01-19 21:07 SchoolGuider3.1\.project
目录 0 2016-01-19 21:07 SchoolGuider3.1\.settings\
文件 598 2016-01-19 21:07 SchoolGuider3.1\.settings\org.eclipse.jdt.core.prefs
目录 0 2016-01-19 21:07 SchoolGuider3.1\bin\
目录 0 2016-01-19 21:07 SchoolGuider3.1\bin\com\
目录 0 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\
目录 0 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\algorithms\
文件 3733 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\algorithms\TSP.class
文件 715 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\algorithms\TSPNode.class
文件 3196 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\algorithms\TwoAllPath.class
文件 2311 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\algorithms\TwoShortPath.class
目录 0 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\
文件 752 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\Addfr
文件 2037 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\Addfr
文件 2777 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\Addfr
文件 6141 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\Addfr
文件 12079 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\DisplayPanel.class
文件 1124 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\ImagePane.class
文件 475 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\MainClient.class
文件 3144 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\Mainfr
文件 811 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$1.class
文件 1111 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$2.class
文件 1211 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$3.class
文件 939 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$4.class
文件 2690 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$5.class
文件 2719 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$6.class
文件 1537 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$7.class
文件 1118 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$8.class
文件 1930 2016-01-19 21:07 SchoolGuider3.1\bin\com\schoolguider\client\OperationPanel$9.class
............此处省略58个文件信息
相关资源
- 数据结构年终考题范围和答案 耿国华
- 数据结构 朱战力 习题解答 数据结构
- 数据结构课程设计 6 1 彩票系统
- 教学计划编制系统
- 大数(链表、数组)实现
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- 航空订票系统_数据结构课程设计
- 多项式求和(数据结构C 版)
- 尚观培训linux董亮老师关于数据结构的
- 数据结构 知识点总结
- 华南理工大学数据结构复习提纲二
- 华南理工大学数据结构复习提纲一
- 数据结构用C 写的停车场系统源代码
- 数据结构(河北科技大学)
- 数据结构考前习题 清华大学出版社
- 数据结构课件(北邮)
- 数据结构实验 基于栈的表达式求值
- 数据结构课程设计——图书管理系统
- 成绩管理系统(数据结构)
- 数据结构-最小通信网问题
- 数据结构课程设计同学通讯录系统
- 数据结构课程设计 公园导游图
- 数据结构殷人昆版的课后答案
- 2006年湖北工业大学409数据结构试题
- 数据结构实验-魔王语言-源码加实验报
- 简单计算器的实现(数据结构)
- 简单计算器的实现(数据结构 修正版
- Fundamentals of Data Structure in C
- 北京邮电大学数据结构历年考研真题
评论
共有 条评论