图的单源点最短路径程序//帮忙编个小程序

来源:百度知道 编辑:UC知道 时间:2024/05/17 12:18:57
校园导游程序
图是无向图
要求是从大门到十个地点的最短路径
用邻接矩阵实现
高手帮忙编个小程序
校园导游咨询
[问题描述]
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
[基本要求]
(1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

#include <stdio.h>
#define N 5 //可以改成10,不过测试数据会麻烦些
#define MAX 100000
#define SWAP(a,b) do{int tmp;tmp=a;a=b;b=tmp;}while(0)
void fun(const int quan[][N],const int shunxu[N],int jieguo[N])//Dijkstra算法主体
{
int i,v,j;
for(i=0;i<N;i++)
{
v=shunxu[i];
for(j=0;j<N;j++)
if(jieguo[v]+quan[v][j]<jieguo[j])
jieguo[j]=jieguo[v]+quan[v][j];
}
}

main()
{
int quan[N][N]={{0,10,3,20,MAX},//邻接矩阵
{10,0,2,5,MAX},
{3,2,0,MAX,15},
{20,5,MAX,0,11},
{MAX,MAX,15,11,0}};
int n,shunxu[N],i,j,jieguo[N];
printf("输入查找点序号:0~N:");
scanf("%d",&n);//起点

for(i=0;i<N;i++)
{
shunxu[i]=i;
jieguo[i]=MAX;
}
jieguo[n]=0;
for(i=1;i<N;i++)
for(j=i;(j>0)&&quan[n][j]<quan[n][shunxu[j-1]];j--)//将各结点插入排序
{
SWAP(shunxu[j],shunxu[j-1]);
}