求单源最短路径—Dijkstra算法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科学生综合性实验报告

项目组长杨滨学号_******* _

成员杨滨

专业_软件工程班级12软件2班

实验项目名称求单源最短路径—Dijkstra算法

指导教师及职称_赵晓平讲师___

开课学期13 至_14 学年_一_学期

上课时间2013 年9 月 1 日

学生实验报告三(综合性实验) 学生姓名

杨滨 学号 0123707 同组人 实验项目 求单源最短路径——Dijkstra 算法

□必修 □选修 □演示性实验 □验证性实验 □操作性实验 □综合性实验 实验地点

W101 实验仪器台号 指导教师 赵晓平 实验日期及节次 2013.12.17(二) 12节

2013.12.19(一) 89A 节

一、实验综述

1、实验目的及要求

(1)了解求最优化问题的贪心算法,了解贪心法的基本要素,学会如何使用贪心策略设计算法;

(2)了解单源最短路径问题,掌握Dijkstra 算法的思想;

(3)编写程序,利用Dijkstra 算法实现,求任

意两点间的单源最短路径。

实验题:

给出如右有向图的边权图,求任意两点间的单源

最短路径。

实验要求:

认真完成实验题,能正确运行,提交实验报告并

上传程序,实验报告要求写出操作步骤、结果、问题、

解决方法、体会等。

2、实验仪器、设备或软件

计算机、VC++6.0、office 、相关的操作系统等。

二、实验过程(实验步骤、记录、数据、分析)

#include

using namespace std;

/*void Graph(int n,bool *inS,int a[6][6],int *d)

{

inS=new bool[n];

inS[0]=0;

for(int i=1;i

inS[i]=1;

a=new int*[n];

for(i=0;i

a[i]=new int[n];

cout<<"input "<

for(i=0;i

for(int j=0;j

√ √

cin>>a[i][j];

d=new int[n];

for(i=0;i

d[i]=a[0][i];

}*/

int Choose(int n,int *d,bool *s)

{

int i,minpos=-1,min=500;

for(i=1;i

if(d[i]

{ min=d[i];minpos=i; }

return minpos;

}

void Dijkstra(int s,int n,bool *inS,int *d,int *path,int a[6][6]) {

int k,i,j;

for(i=0;i

{

inS[i]=false;d[i]=a[s][i];

if(i!=s && d[i]<500) path[i]=s;

else path[i]=-1;

}

inS[s]=true;d[s]=0;

for(i=0;i

{

k=Choose(n,d,inS);

inS[k]=true;

for(j=0;j

if(!inS[j] && d[k]+a[k][j]

{ d[j]=d[k]+a[k][j];path[j]=k; } }

}

void Display(int s,int n,int a[6][6],int *d,int *path)

{

int t,m;

cout<<"a["<

for(int i=0;i

{

for(int j=0;j

cout<

cout<

}

cout<<"输入终点: ";

cin>>t;

cout<<"距离为d["<

cout<<"路径为: "<

while(t!=s)

{

m=path[t];

cout<

t=m;

}

cout<

}

int main()

{

int n,*d,*path;//**a,

bool *inS;

int a[6][6]={0,50,10,500,70,500,500,0,15,500,10,500,20,500,0,15,500,500, 500,20,500,0,35,500,500,500,500,30,0,500,500,500,500,3,500,0};

cout<<"Input n: ";

cin>>n;

inS=new bool[n];

/* a=new int*[n];

for(i=0;i

a[i]=new int[n];

cout<<"input "<

for(i=0;i

for(int j=0;j

cin>>a[i][j];

*/

path=new int[n];

d=new int[n];

// Graph(n,inS,a,d);

int s=0;

Dijkstra(s,n,inS,d,path,a);

Display(s,n,a,d,path);

return 0;

相关文档
最新文档