没有合适的资源?快使用搜索试试~ 我知道了~
校园导航的源代码 基于Dijkstra算法设计了一款用于校园导航的系统,该系统结合用户选择位置点的情况,显示学校简易地图,并将最短路径展示给用户。
资源推荐
资源详情
资源评论
#include<stdio.h>
#include<limits.h>
#include<stdlib.h>
#dene UNVISITED 0
#dene VISITED 1
#dene INFINITY INT_MAX
#dene TRUE 1
#dene FALSE 0
#dene OK 1
#dene ERROR 0
#dene OVERFLOW 0
#dene UNSELECTED 0
#dene SELECTED 1
typedef int Status;
typedef enum{DG,DN,UDG,UDN} GraphKind; //图的四种类型:有向图
有向带权图,无向图和无向带权图
typedef struct{
int symbol;//景点代号
char *name;//景点名字
char *introduction;//景点简介
}spot; //景点类型
typedef struct{
spot v,w; //边的端点
int info; //对带权图,为权值,此处为距离
}ArcInfo; //存储边信息
typedef struct{
spot *vexs; //顶点数组,spot 是景点类型
int **arcs; //关系数组,此图为带权图,则为权值或 INFINITY
int n,e; //顶点数和边数
GraphKind kind;// 图的类型
int *tags; //标志数组,可用于在图的遍历中标记顶点访问与否
}MGraph; //邻接数组类型
typedef struct{
int prev; //当前最短路径上该顶点的前驱顶点的位序
int lowcost;//当前最短路径的长度
}DistInfo;//V-U 中定点的当前最短路径信息
int LocateVex(MGraph G,spot v){
int i;
for(i=0;i<G.n;i++)
if(v.symbol==G.vexs[i].symbol) return i;
return -1;
}
Status InitGraph(MGraph &G,spot *vexs,int n){
//初始化含 n 个顶点且无边的 kind 类的图 G
int i,j,info;
if(n<0||(n>0&&NULL==vexs)) return ERROR;
if(G.kind!=UDN) return ERROR;
info=INFINITY; //带权图
G.n = n;
G.e = 0; //顶点数和边数
if(0==G.n) return OK; //空图
if(NULL==(G.vexs=(spot*)malloc(n*sizeof(spot)))) return
OVERFLOW;
for(i=0;i<G.n;i++) G.vexs[i]=vexs[i];
if(NULL==(G.arcs=(int **)malloc(n*sizeof(int*)))) //分配指针数组
return OVERFLOW;
for(i=0;i<n;i++) //分配每个指针所指向的数组
if(NULL==(G.arcs[i]=(int*)malloc(n*sizeof(int))))
return OVERFLOW;
if(NULL==(G.tags=(int*)malloc(n*sizeof(int)))) return OVERFLOW;
for(i=0;i<n;i++){ //初始化标志数组和关系数组
G.tags[i]=UNVISITED;
for(j=0;j<n;j++) G.arcs[i][j]=info;
}
return OK;
}
Status CreateGraph(MGraph &G,GraphKind kind,spot *vexs,int
n,ArcInfo *arcs,int e){
//创建含 n 个顶点和 e 条边的无向带权图图 G,vexs 为顶点信息,arcs 为
边信息
if(n<0||e<0||(n>0&&NULL==vexs)||(e>0&&NULL==arcs)) return
ERROR;
G.kind=kind;
int i,j,k;
spot v,w;
if(InitGraph(G,vexs,n)!=OK) return ERROR; //初始化
G.e = e;//边数
for(k=0;k<G.e;k++){//建立关系数组
v=arcs[k].v; w=arcs[k].w; //读入边(v,w)
i=LocateVex(G,v);j=LocateVex(G,w);//确定 v 和 w 在顶点数组中的
位序 i 和 j
if(i<0||j<0) return ERROR;
G.arcs[i][j]=G.arcs[j][i]=arcs[k].info;
}
return OK;
}
int FirstAdjVex(MGraph G,int k){//求图 G 中 k 顶点的第一个邻接顶点的位
序
剩余14页未读,继续阅读
资源评论
不想写博客
- 粉丝: 5
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功