收藏 分销(赏)

数据结构最短路径.doc

上传人:仙人****88 文档编号:9458353 上传时间:2025-03-27 格式:DOC 页数:4 大小:150.50KB 下载积分:10 金币
下载 相关 举报
数据结构最短路径.doc_第1页
第1页 / 共4页
数据结构最短路径.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
图的最短路径 一、 实验目的 1. 使学生熟悉最短路径的算法实现 二、 掌握带权图的存储结构和处理方法 1. 硬件:每个学生需配备计算机一台。操作系统:DOS或Windows 2. 软件:DOS或Windows操作系统+Turbo C; 三、 实验要求 1. 能够独立完成带权图的存储和最短路径的生成 四、 实验内容 1. 现在假设我国铁路交通图如下(权值表示距离),请用合适的存储结构将下图存储到计算机中方便进行处理。 2. 现在我想以最小的代价从徐州出发到达其他目的地,请用Dijkstra算法实现我的要求的路径。 #include "stdio.h" #include "malloc.h" typedef struct {int *vexs; int **arcs; int vexnum; }graph_hc; typedef struct {int adjvex; int lowcost; }markedg_hc; graph_hc*initgraph_hc() {int i,j;graph_hc*g; g=(graph_hc*)malloc(sizeof(graph_hc)); g->vexnum=25; g->vexs=(int*)malloc(g->vexnum*sizeof(int)); g->arcs=(int**)malloc(g->vexnum*sizeof(int*)); for(i=0;i<g->vexnum;i++) g->arcs[i]=(int*)malloc(g->vexnum*sizeof(int)); for(i=0;i<g->vexnum;i++) for(j=0;j<g->vexnum;j++) {g->arcs[i][j]=0;} return g;} void creategraph_hc(graph_hc *g) {int i,j; for(i=0;i<g->vexnum;i++)g->vexs[i]=i; g->arcs[0][9]=1892; g->arcs[1][3]=242; g->arcs[2][4]=668; g->arcs[2][9]=1145; g->arcs[3][5]=305; g->arcs[4][6]=137; g->arcs[4][11]=695; g->arcs[5][6]=704; g->arcs[5][7]=397; g->arcs[6][12]=674; g->arcs[8][9]=216; g->arcs[9][10]=676; g->arcs[10][11]=511;g->arcs[10][13]=842; g->arcs[11][12]=349;g->arcs[11][14]=534; g->arcs[12][15]=651;g->arcs[13][16]=110; g->arcs[13][17]=967;g->arcs[14][18]=409; g->arcs[15][19]=825;g->arcs[16][17]=639; g->arcs[17][18]=902;g->arcs[17][21]=607; g->arcs[18][19]=367;g->arcs[18][21]=672; g->arcs[18][23]=675;g->arcs[19][20]=622; g->arcs[21][22]=255;g->arcs[23][24]=140; for(i=0;i<g->vexnum;i++) for(j=i;j<g->vexnum;j++) if(g->arcs[i][j]) g->arcs[j][i]=g->arcs[i][j];} void printgraph_hc(graph_hc*g) {int x,y; printf("\n城市间连通图为:\n"); for(x=0;x<g->vexnum;x++) for(y=x;y<g->vexnum;y++) if(g->arcs[x][y])printf("(%d,%d)距离:%d\t",x,y,g->arcs[x][y]);} int selectnearvex_hc(markedg_hc*mark,int *flag,int num) {int j; int nearestv; int lowcost=32767; for(j=0;j<num;j++) {if(flag[j]!=1&&mark[j].lowcost<lowcost) {nearestv=j; lowcost=mark[j].lowcost;}} flag[nearestv]=1; return nearestv;} void markothervex_hc(graph_hc*g,markedg_hc*mark,int nearestv,int num,int*flag) {int j; for(j=0;j<num;j++) {if(g->arcs[nearestv][j]>0) {if(flag[j]!=1) {if(mark[j].lowcost>(mark[nearestv].lowcost+g->arcs[nearestv][j])) {mark[j].lowcost= mark[nearestv].lowcost+g->arcs[nearestv][j]; mark[j].adjvex=nearestv;}}}}} void shortestpath_hc(graph_hc*g,markedg_hc*mark,int start) {int i,num; int *flag; int nearestv; num=g->vexnum; flag=(int *)malloc((num)*sizeof(int)); flag[start]=1; for(i=0;i<g->vexnum;i++) {mark[i].adjvex=start; if( g->arcs[start][i]>0) {mark[i].lowcost=g->arcs[start][i];} else {mark[i].lowcost=32767;}} for(i=1;i<g->vexnum;i++) {nearestv=selectnearvex_hc(mark,flag,num); markothervex_hc(g,mark,nearestv,num,flag);}} void printshortpath_hc(graph_hc*g,markedg_hc*mark,int start) {int i,j,k,path[25]; for(i=0;i<g->vexnum;i++) {if(i!=start) {printf("从%d到%d最短路径为:%d; ",start,i,mark[i].lowcost); printf("途经:"); k=0;path[k]=i; j=mark[i].adjvex; while(j!=start) {path[++k]=j; j=mark[j].adjvex;} printf("%d",start); for(j=k;j>=0;j--)printf(",%d",path[j]); printf(".\n");}}} main() {int city; graph_hc*g;markedg_hc*mark; g=initgraph_hc(); creategraph_hc(g); printf("城市名称/代号:"); printf("乌鲁木齐/0, 哈尔滨/1, 呼和浩特/2, 长春/3, 北京/4, "); printf("沈阳/5, 天津/6, 大连/7, 西宁/8, 兰州/9, 西安/10, 郑州/11, "); printf("徐州/12, 成都/13, 武汉/14, 上海/15, 昆明/16, 贵阳/17, 株州/18,"); printf("南昌/19, 福州/20, 柳州/21, 南宁/22, 广州/23, 深圳/24.\n"); printgraph_hc(g); mark=(markedg_hc*)malloc(g->vexnum*sizeof(markedg_hc)); printf("\n输入起始城市:");scanf("%d",&city); shortestpath_hc(g,mark,city); printshortpath_hc(g,mark,city); printf("\n作者:黄晨");}
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服