这篇文章主要介绍了c++查询最短路径示例,需要的朋友可以参考下YXkHTML5中文学习网 - HTML5先行者学习网
代码如下:YXkHTML5中文学习网 - HTML5先行者学习网
//shortest_path.cYXkHTML5中文学习网 - HTML5先行者学习网
#includeYXkHTML5中文学习网 - HTML5先行者学习网
#include//用fileYXkHTML5中文学习网 - HTML5先行者学习网
#include//可用gets(),puts()YXkHTML5中文学习网 - HTML5先行者学习网
#include"shortest_path.h"YXkHTML5中文学习网 - HTML5先行者学习网
#define MAX 32767YXkHTML5中文学习网 - HTML5先行者学习网
#define MENU "欢迎进入导航系统!/n==========菜单===========/n0、载入北外地图/n1、建立地图/n2、查询最短路径/n3、退出/n==========菜单===========/n"YXkHTML5中文学习网 - HTML5先行者学习网
struct stmap map;//无向网YXkHTML5中文学习网 - HTML5先行者学习网
const char *filepath1="D://spots.dat";YXkHTML5中文学习网 - HTML5先行者学习网
const char *filepath2="D://paths.dat";YXkHTML5中文学习网 - HTML5先行者学习网
int load1()YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
FILE *fp;YXkHTML5中文学习网 - HTML5先行者学习网
int i;YXkHTML5中文学习网 - HTML5先行者学习网
fp=fopen(filepath1,"r");YXkHTML5中文学习网 - HTML5先行者学习网
if(fp==NULL){printf("spots文件打开异常,读取失败");return -1;}YXkHTML5中文学习网 - HTML5先行者学习网
fread(&map.spotnum,sizeof(int),1,fp);YXkHTML5中文学习网 - HTML5先行者学习网
for(i=0;iYXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
fread(map.spot[i].name,sizeof(char),10,fp);YXkHTML5中文学习网 - HTML5先行者学习网
fread(map.spot[i].intro,sizeof(char),20,fp);YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
fclose(fp);YXkHTML5中文学习网 - HTML5先行者学习网
return 0;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
int load2()YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
FILE *fp;YXkHTML5中文学习网 - HTML5先行者学习网
int i,j;YXkHTML5中文学习网 - HTML5先行者学习网
fp=fopen(filepath2,"r");YXkHTML5中文学习网 - HTML5先行者学习网
if(fp==NULL){printf("paths文件打开异常,读取失败");return -1;}YXkHTML5中文学习网 - HTML5先行者学习网
fread(&map.pathmatrix,sizeof(int),1,fp);YXkHTML5中文学习网 - HTML5先行者学习网
for(i=0;iYXkHTML5中文学习网 - HTML5先行者学习网
for(j=0;jYXkHTML5中文学习网 - HTML5先行者学习网
fread(&map.pathmatrix[i][j],sizeof(int),1,fp);YXkHTML5中文学习网 - HTML5先行者学习网
fclose(fp);YXkHTML5中文学习网 - HTML5先行者学习网
return 0;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
void loadmap()YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
if(load1()==0)YXkHTML5中文学习网 - HTML5先行者学习网
printf("spot读入成功/n");YXkHTML5中文学习网 - HTML5先行者学习网
elseYXkHTML5中文学习网 - HTML5先行者学习网
printf("spot读入失败/n");YXkHTML5中文学习网 - HTML5先行者学习网
if(load2()==0)YXkHTML5中文学习网 - HTML5先行者学习网
printf("path读入成功/n");YXkHTML5中文学习网 - HTML5先行者学习网
elseYXkHTML5中文学习网 - HTML5先行者学习网
printf("path读入失败/n");YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
void drawmap()//直接输入YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
int i;YXkHTML5中文学习网 - HTML5先行者学习网
int a,b;YXkHTML5中文学习网 - HTML5先行者学习网
char s1[10],s2[10];YXkHTML5中文学习网 - HTML5先行者学习网
printf("共有几个景点?(<=20)");//map.spotmunYXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
scanf("%d",&map.spotnum);YXkHTML5中文学习网 - HTML5先行者学习网
printf("共有几条景点与景点之间直接相连的路径?");//map.pathnumYXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);//清空键盘缓冲区,在"stdio.h"中YXkHTML5中文学习网 - HTML5先行者学习网
scanf("%d",&map.pathnum);YXkHTML5中文学习网 - HTML5先行者学习网
for(a=0;aYXkHTML5中文学习网 - HTML5先行者学习网
for(b=0;bYXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
if(a==b)map.pathmatrix[a][b]=0;YXkHTML5中文学习网 - HTML5先行者学习网
else map.pathmatrix[a][b]=MAX;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
for(i=0;iYXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入第%d个景点的名称(<=10letters)",i+1);YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
gets(map.spot[i].name);YXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入第%d个景点的介绍(<=20letters)",i+1);YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
gets(map.spot[i].intro);YXkHTML5中文学习网 - HTML5先行者学习网
}//输入景点名字和简介map.spot[].name;map.spot[].introYXkHTML5中文学习网 - HTML5先行者学习网
for(i=0;iYXkHTML5中文学习网 - HTML5先行者学习网
do{YXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入第%d条路径的起点",i+1);YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
gets(s1);YXkHTML5中文学习网 - HTML5先行者学习网
for(a=0;aYXkHTML5中文学习网 - HTML5先行者学习网
if(!strcmp(map.spot[a].name,s1))break;//查找景点编号YXkHTML5中文学习网 - HTML5先行者学习网
if(a==map.spotnum)printf("不存在此景点,请重新输入。/n");YXkHTML5中文学习网 - HTML5先行者学习网
}while(a==map.spotnum);YXkHTML5中文学习网 - HTML5先行者学习网
do{YXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入第%d条路径的终点",i+1);YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
gets(s2);YXkHTML5中文学习网 - HTML5先行者学习网
for(b=0;bYXkHTML5中文学习网 - HTML5先行者学习网
if(!strcmp(map.spot[b].name,s2))break;YXkHTML5中文学习网 - HTML5先行者学习网
if(b==map.spotnum)printf("不存在此景点,请重新输入。/n");YXkHTML5中文学习网 - HTML5先行者学习网
}while(b==map.spotnum);YXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入第%d条路径的长度",i+1);YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
scanf("%d",&map.pathmatrix[a][b]);YXkHTML5中文学习网 - HTML5先行者学习网
map.pathmatrix[b][a]=map.pathmatrix[a][b];//输入路径长度YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
void shortestpath()//最短路径,输入起点终点输出路径和路程YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
struct stspath spath[20];YXkHTML5中文学习网 - HTML5先行者学习网
int s,t,v,w,min;YXkHTML5中文学习网 - HTML5先行者学习网
char s1[10],s2[10];YXkHTML5中文学习网 - HTML5先行者学习网
int pathorder[20];YXkHTML5中文学习网 - HTML5先行者学习网
struct stspath *p;//pathorderYXkHTML5中文学习网 - HTML5先行者学习网
do{YXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入起点");//查找起点的景点编号YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
gets(s1);YXkHTML5中文学习网 - HTML5先行者学习网
for(s=0;sYXkHTML5中文学习网 - HTML5先行者学习网
if(!strcmp(map.spot[s].name,s1))break;YXkHTML5中文学习网 - HTML5先行者学习网
if(s==map.spotnum)printf("不存在此景点,请重新输入。/n");YXkHTML5中文学习网 - HTML5先行者学习网
}while(s==map.spotnum);YXkHTML5中文学习网 - HTML5先行者学习网
do{YXkHTML5中文学习网 - HTML5先行者学习网
printf("请输入终点");//查找终点的景点编号YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
gets(s2);YXkHTML5中文学习网 - HTML5先行者学习网
for(t=0;tYXkHTML5中文学习网 - HTML5先行者学习网
if(!strcmp(map.spot[t].name,s2))break;YXkHTML5中文学习网 - HTML5先行者学习网
if(t==map.spotnum)printf("不存在此景点,请重新输入。/n");YXkHTML5中文学习网 - HTML5先行者学习网
}while(t==map.spotnum);YXkHTML5中文学习网 - HTML5先行者学习网
for(v=0;vYXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
spath[v].length=MAX;YXkHTML5中文学习网 - HTML5先行者学习网
spath[v].in=0;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
spath[s].in=1;YXkHTML5中文学习网 - HTML5先行者学习网
spath[s].length=0;YXkHTML5中文学习网 - HTML5先行者学习网
spath[s].pior=NULL;YXkHTML5中文学习网 - HTML5先行者学习网
v=s;YXkHTML5中文学习网 - HTML5先行者学习网
while(v!=t){YXkHTML5中文学习网 - HTML5先行者学习网
for(w=0;wYXkHTML5中文学习网 - HTML5先行者学习网
if((!spath[w].in)&&(spath[w].length>spath[v].length+map.pathmatrix[v][w])){YXkHTML5中文学习网 - HTML5先行者学习网
spath[w].length=spath[v].length+map.pathmatrix[v][w];YXkHTML5中文学习网 - HTML5先行者学习网
spath[w].pior=&spath[v];YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
min=MAX;YXkHTML5中文学习网 - HTML5先行者学习网
for(w=0;wYXkHTML5中文学习网 - HTML5先行者学习网
if((!spath[w].in)&&(spath[w].lengthYXkHTML5中文学习网 - HTML5先行者学习网
min=spath[w].length;YXkHTML5中文学习网 - HTML5先行者学习网
v=w;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
spath[v].in=1;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
printf("最短路径长度为%d,最短路径为:/n",spath[t].length);//print pathYXkHTML5中文学习网 - HTML5先行者学习网
for(v=0,p=&spath[t];p->pior!=NULL;p=p->pior)YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
pathorder[v]=p-spath;YXkHTML5中文学习网 - HTML5先行者学习网
v++;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
pathorder[v]=s;YXkHTML5中文学习网 - HTML5先行者学习网
for(;v>=0;v--)YXkHTML5中文学习网 - HTML5先行者学习网
printf("%10s",map.spot[pathorder[v]].name);YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
void main()YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
int menu=1;YXkHTML5中文学习网 - HTML5先行者学习网
printf(MENU);YXkHTML5中文学习网 - HTML5先行者学习网
while(menu!=3)YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
printf("/n请输入您的选项(数字)/n");YXkHTML5中文学习网 - HTML5先行者学习网
fflush(stdin);YXkHTML5中文学习网 - HTML5先行者学习网
scanf("%d",&menu);YXkHTML5中文学习网 - HTML5先行者学习网
switch (menu)YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
case 0: loadmap();printf("/n北外地图载入完成/n");break;YXkHTML5中文学习网 - HTML5先行者学习网
case 1: drawmap();printf("/n新建完成/n");break;YXkHTML5中文学习网 - HTML5先行者学习网
case 2: shortestpath();printf("/n查询完成完成/n");break;YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
printf("谢谢使用!");YXkHTML5中文学习网 - HTML5先行者学习网
}YXkHTML5中文学习网 - HTML5先行者学习网
2. [文件] shortest_path.h ~ 430B 下载(2)YXkHTML5中文学习网 - HTML5先行者学习网
#ifndef _SHORTEST_PATH_H_YXkHTML5中文学习网 - HTML5先行者学习网
#define _SHORTEST_PATH_H_YXkHTML5中文学习网 - HTML5先行者学习网
struct stspot{//景点的顶点YXkHTML5中文学习网 - HTML5先行者学习网
char name[11];//景点名称no more than 10YXkHTML5中文学习网 - HTML5先行者学习网
char intro[20];//景点介绍no more than 20YXkHTML5中文学习网 - HTML5先行者学习网
};YXkHTML5中文学习网 - HTML5先行者学习网
struct stmap{//整个无向网YXkHTML5中文学习网 - HTML5先行者学习网
stspot spot[20];//点,景点向量YXkHTML5中文学习网 - HTML5先行者学习网
int pathmatrix[20][20];//边,路径的邻接矩阵YXkHTML5中文学习网 - HTML5先行者学习网
int spotnum;YXkHTML5中文学习网 - HTML5先行者学习网
int pathnum;YXkHTML5中文学习网 - HTML5先行者学习网
};YXkHTML5中文学习网 - HTML5先行者学习网
struct stspath//求最短路径时的景点数组YXkHTML5中文学习网 - HTML5先行者学习网
{YXkHTML5中文学习网 - HTML5先行者学习网
stspath * pior;YXkHTML5中文学习网 - HTML5先行者学习网
int in;// can be boolenYXkHTML5中文学习网 - HTML5先行者学习网
int length;YXkHTML5中文学习网 - HTML5先行者学习网
};YXkHTML5中文学习网 - HTML5先行者学习网
#endifYXkHTML5中文学习网 - HTML5先行者学习网
YXkHTML5中文学习网 - HTML5先行者学习网
注:更多精彩文章请关注三联编程教程栏目。YXkHTML5中文学习网 - HTML5先行者学习网