GIS实验.docx
- 文档编号:3498942
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:10
- 大小:63.22KB
GIS实验.docx
《GIS实验.docx》由会员分享,可在线阅读,更多相关《GIS实验.docx(10页珍藏版)》请在冰豆网上搜索。
GIS实验
资源环境与旅游系
本科实验报告
姓名xxx 学号xxxxxxx
专业地理信息系统班级
实验课程名称GIS算法基础
实验名称Dijkstra算法
指导教师及职称
开放性实验□是
否
学期2013至2014学年第一学期
池州学院资源环境与旅游系
一、实验准备
实验名称:
Dijkstra算法
实验时间:
2013年12月27日
实验类型:
□验证性实验□综合性实验
设计性实验
1、实验目的和要求:
(1)掌握最短路径算法原理
(2)能够写出最短路径算法代码或伪代码。
2、实验材料及相关设备:
1)计算机
(2)MicrosoftVisualStudio2008软件,及相关数据。
(3)实验报告指导书
(4)u盘
3、实验方法步骤及注意事项:
实验步骤:
(1)启动MicrosoftVisualStudio2008软件.
(2)写Dijkstra算法代码,Dijkstra算法的原理非常简单,它将G中所有的顶点分为两部分,一是最小权重已确定的红点集RN,另一个是尚未确定最小权重的蓝点集BN。
从源点到终点的最短路径简称未终点的最短路径。
(3)检测及改正代码,代码无错,测试。
实验注意事项:
(1)写代码是要注意C#格式与C语言不同。
(2)注意代码逻辑性。
(3)编写程序时,弄清何处是变量名,及其命名。
二、实验内容、步骤和结果
(一)、主要内容
(1)运行MicrosoftVisualStudio2008软件,写最短路径算法代码。
(2)检查代码,改正其中的错误,运行调试。
(3)调试,查看运行结果。
(二)、具体实施步骤
(1)需求分析:
首先要分析一个带权的有向图,输入时可通过一对一对输入存在弧的两个弧头与弧尾顶点以及弧上的权值从而输入整个有向图。
输入一对对弧后,我们可以采用数组的形式来进行存储每个顶点之间的权值,最后由用户输入该有向图的源点(即每个最短路径的起点),要求源点必须为刚才输入的各顶点中的某一个,如果用户输入错误,程序要给出错误信息提示并退出程序。
然后,我们可以设计一个Graph这样的类,将对关系的各种操作放入其中,然后我们在主函数中调运这个类就可以实现最短路问题的求解了
(2)在计算机MicrosoftVisualStudio2008软件,输入下面代码。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
namespaceDijkstra
{
publicpartialclassForm1:
Form
{
int[,]Arr=newint[11,11];
//记录点是否已经确定最短距离
bool[]IsVPassed=newbool[11];
publicForm1()
{
InitializeComponent();
#region距离初始化
for(inti=0;i<11;i++)
{
for(intj=0;j<11;j++)
{
if(i==j)
{
Arr[i,j]=0;
}
else
{
Arr[i,j]=9999;
}
}
}
Arr[0,1]=2;
Arr[0,2]=8;
Arr[0,3]=1;
Arr[1,0]=2;
Arr[1,2]=6;
Arr[1,4]=1;
Arr[2,0]=8;
Arr[2,1]=6;
Arr[2,3]=7;
Arr[2,4]=5;
Arr[2,5]=1;
Arr[2,6]=2;
Arr[3,0]=1;
Arr[3,2]=7;
Arr[3,6]=9;
Arr[4,1]=1;
Arr[4,2]=5;
Arr[4,5]=3;
Arr[4,7]=2;
Arr[5,2]=1;
Arr[5,4]=3;
Arr[5,6]=4;
Arr[5,8]=6;
Arr[6,2]=2;
Arr[6,3]=9;
Arr[6,5]=4;
Arr[6,8]=3;
Arr[6,9]=1;
Arr[7,4]=2;
Arr[7,8]=7;
Arr[7,10]=9;
Arr[8,5]=6;
Arr[8,6]=3;
Arr[8,7]=7;
Arr[8,9]=1;
Arr[8,10]=2;
Arr[9,6]=1;
Arr[9,8]=1;
Arr[9,10]=4;
Arr[10,7]=9;
Arr[10,8]=2;
Arr[10,9]=4;
#endregion
//初始化IsVPassed
for(inti=0;i<11;i++)
{
IsVPassed[i]=false;
}
}
///
///计算最短路径
///
publicvoidCompute()
{
inttemp=8888;//定义临时变量,记录临时的最小值
intCurrentColumnID=0;
intm=0;
for(m=0;m<11;m++)
{
//如果点没有走过则跳出循环,即m值没有走到最大
if(!
IsVPassed[m])
{
break;
}
}
//若果m=11,即所有的点都走过了
if(m==11)
{
return;
}
//获取当前的点的最短路径
for(intj=0;j<11;j++)
{
if(!
IsVPassed[j])
{
if(Arr[0,j] { temp=Arr[0,j]; CurrentColumnID=j; } } } //标记当前点已走过 IsVPassed[CurrentColumnID]=true; //更新与当前点相关的其他点的临时最短距离 for(inti=0;i<11;i++) { inttemm=Arr[0,CurrentColumnID]+Arr[CurrentColumnID,i]; if(temm { Arr[0,i]=temm; } } Compute(); } publicvoidresult() { DataTabledt=newDataTable(); for(inti=0;i<11;i++) { dt.Columns.Add(); } for(inti=0;i<11;i++) { DataRowdr=dt.NewRow(); for(intj=0;j<11;j++) { dr[j]=Arr[i,j]; } dt.Rows.Add(dr); } this.dataGridView1.DataSource=dt; } privatevoidForm1_Load(objectsender,EventArgse) { Compute(); result(); } } } 调试结果: 三、实验小结 1、实验中出现过的问题(或错误)、原因分析 (1)由于对C#不熟,导致操作有点困难。 (2)写代码时,编写程序时,变量名命名混乱。 (3)发现自己对程序中的一些提示信息并不清楚。 2、保证实验成功的关键问题 (1)认真听取老师对实验操作介绍,不要盲目操作。 (2)对C#入门有所了解,方便操作。 (3)注意代码逻辑性,和变量名命名。 3、对本次实验的自我评价 通过本次试验,掌握书写线段相交代码,及相关软件操作方法,在书写注意代码逻辑性。 在调试过程中在调试过程中,当求单源最短路径时,程序默认以第一个顶点为源位置,降低了程序的实用性。 要及时修改调试中程序错误。 GIS试验更需要我们自己独自操作,要靠自己去发现问题,独自思考去解决问题,在老师的指点下把实验操作完成更好。 要多操作,多练习,在试验中获得成就感和收获。 指导教师评语及得分: 得分: 签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GIS 实验