最短路径算法实验报告

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

东华大学计算机学院离散数学

实验五:最短路径

实验所属系列:离散数学课后实验

实验对象:本科

相关课程及专业:离散数学,计算机专业

实验类型:课后实验

实验时数(学分):4学时

实验目的

学习图的最短路径算法的实现。

实验内容与要求

根据输入的图形(实验四),输入起点和终点,求出最短路径和最短路径的长度。

实验的软硬件环境

PC机一台,装有VC++6.0或其它C语言集成开发环境。

实验准备

熟悉最短路径算法。

实验步骤

1.编写一段代码,接收键盘的输入定点的数量,并以输入的整数对作为边来建立图形的邻接矩阵(无向权重图)。

例如:5,6,12

表示定点5和定点6间有边,边的权重为12。

2 打印出邻接矩阵。

3.输入起点和终点。

4、打印最短路径和最短路径的长

#include

#define BIG 9999

void dijkstra(int cost[][6],int n,int st,int distance[])

{

int s[6];

int mindis,dis;

int i,j,u;

for(i=0;i

{

distance[i]=cost[st][i];

s[i]=0;

}

s[st]=1;

for(i=0;i

{

mindis=BIG;

for(j=0;j

{

if(s[j]==0&&distance[j]

{

mindis=distance[j];

u=j;

}

}

for(j=0;j

{

if(s[j]==0)

{

dis=distance[u]+cost[u][j];

distance[j]=(distance[j]

}

}

s[u]=1;

}

}

void main()

{

int y,j;

char *vertex[6]={"V1","V2","V3","V4","V5","V6"};

int cost[6][6];

for(y=0;y<6;y++)

{

for(j=0;j<6;j++)

{

cost[y][j]=BIG;

}

}

int start,end,weight,i;

printf("input start&end&weight:");

for(i=0;weight!=0;i++)

{

scanf("%d,%d,%d",&start,&end,&weight);

cost[start-1][end-1]=weight;

cost[end-1][start-1]=weight;

}

int distance[6];

int s,e;

printf("input start-vertex &&end-vertex(no more than 6):");

scanf("%d,%d",&s,&e);

dijkstra(cost,6,s-1,distance);

printf("%s---->%s %d\n",vertex[s-1],vertex[e-1],distance[e-1]);

}

数据测试

输入:

1,3,5

1,4,30

2,1,2

3,2,15

3,6,7

5,4,4

6,4,10

6,5,18

计算1,5两点之间距离

输出:

相关文档
最新文档