#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"advisory.h"
/*添加城市*/
void AddCity(MatGraph &g)
{
int i = 0;
int j = 0;
char tmpname[MAXVEX];
printf(" 请输入城市名称:");
scanf("%s",&tmpname);
while(i<g.n)//名称查重
{
if(strcmp(tmpname,g.vexs[i].cityname))
{
i++;
}
else
{
printf(" 城市已存在,请重新输入城市名称:");
scanf("%s",&tmpname);
i = 0;
}
}
i = g.n;
g.edges[i][i] = 0;//到自己初始化
g.cost[i][i] = 0;
g.time[i][j] = 0;
for(j = 0;j<g.n;j++)
{
g.edges[i][j] = g.edges[j][i] = INF;//到其他各地及各地到自己的初始化
g.cost[i][j] = g.cost[j][i] = INF;
g.time[i][j] = g.time[j][i] = INF;
}
g.vexs[i].adjvex = i;//赋予编号
strcpy(g.vexs[g.n].cityname,tmpname);
printf(" 添加城市%s成功!\n",g.vexs[i].cityname);
g.n++;
}
/*删除城市*/
void DeleteCity(MatGraph &g)
{
int i = 0;
int j = 0;
char tmpname[MAXVEX];
printf(" 请输入要删除的城市名称:");
scanf("%s",&tmpname);
while(i<g.n&&strcmp(tmpname,g.vexs[i].cityname))
{
i++;//找城市名称
}
if(i>=g.n)
{
printf(" 该城市不存在!\n");
return;
}
else
{
for(j = i;j<g.n-1;j++)//删除相关路线,其后的元素前移
{
for(i = 0;i<g.n;i++)
{
g.edges[i][j] = g.edges[i][j+1];
g.cost[i][j] = g.cost[i][j+1];
g.time[i][j] = g.time[i][j+1];
}
for(i = 0;i<g.n;i++)
{
g.edges[j][i] = g.edges[j+1][i];
g.cost[j][i] = g.cost[j+1][i];
g.time[j][i] = g.time[j+1][i];
}
strcpy(g.vexs[j].cityname,g.vexs[j+1].cityname);
}//for
g.n--;
}//else
printf(" 删除成功!\n");
}
/*添加路线*/
void AddRoute(MatGraph &g)
{
int i = 0;
int j = 0;
if(g.n<=1)//1个或0个城市无法添加路线
{
printf(" 目前只有%d个城市,无可添加路线!\n",g.n);
}
printf(" ");
for(i = 0;i<g.n;i++)//输出已有城市信息
{
printf("%d、%s ",g.vexs[i].adjvex+1,g.vexs[i].cityname);
}
printf("\n");
printf(" 请选择路线添加的两个城市编号:");
scanf("%d%d",&i,&j);
while(i==j||i>g.n||j>g.n)
{
printf(" 输入错误,请重新输入:");
scanf("%d%d",&i,&j);
}
i--;
j--;
if(g.edges[i][j]!=INF)//路径已存在请选择修改
{
printf(" 路径已存在!");
}
else
{
printf(" 请输入两城市之间路程(km):");
scanf("%d",&g.edges[i][j]);
g.edges[j][i] = g.edges[i][j];
printf(" 请输入两城市之间时间(h):");
scanf("%d",&g.time[i][j]);
g.time[j][i] = g.time[i][j];
printf(" 请输入两城市之间花费(元):");
scanf("%f",&g.cost[i][j]);
g.edges[j][i] = g.edges[i][j];
g.e++;
}
printf(" 添加成功!\n");
printf(" %s到%s的路程是%d时间是%d花费是%.2f\n",g.vexs[i].cityname,g.vexs[j].cityname,g.edges[i][j],g.time[i][j],g.cost[i][j]);
}
/*修改路线*/
void ModRoute(MatGraph &g)
{
int i = 0;
int j = 0;
int k = 0;
if(g.n<=1)//1个或0个城市无法添加路线
{
printf(" 目前只有%d个城市,无可修改路线!\n",g.n);
}
printf(" ");
for(i = 0;i<g.n;i++)//输出已有城市信息
{
printf("%d、%s ",g.vexs[i].adjvex+1,g.vexs[i].cityname);
}
printf("\n");
printf(" 请选择路线修改的两个城市编号:");
scanf("%d%d",&i,&j);
while(i==j||i>g.n||j>g.n)
{
printf(" 输入错误,请重新输入:");
scanf("%d%d",&i,&j);
}
i--;
j--;
if(g.edges[i][j]==INF)//不存在路径请新建
{
printf(" %s和%s间不存在路径!\n");
return;
}
while(1)
{
printf(" 请选择要修改的内容:\n");
printf(" 1、路程\n");
printf(" 2、时间\n");
printf(" 3、花费\n");
printf(" 4、退出\n");
scanf("%d",&k);
while(k!=1&&k!=2&&k!=3&&k!=4)
{
printf(" 输入非法!请重新输入:");
scanf("%d",&k);
}
switch(k)
{
case 1:
printf(" 请输入两城市之间路程(km):");
scanf("%d",&g.edges[i][j]);
g.edges[j][i] = g.edges[i][j];
break;
case 2:
printf(" 请输入两城市之间时间(h):");
scanf("%d",&g.time[i][j]);
g.time[j][i] = g.time[i][j];
break;
case 3:
printf(" 请输入两城市之间花费(元):");
scanf("%f",&g.cost[i][j]);
g.edges[j][i] = g.edges[i][j];
break;
case 4:
printf(" %s到%s的路程是%d时间是%d花费是%.2f\n",g.vexs[i].cityname,g.vexs[j].cityname,g.edges[i][j],g.time[i][j],g.cost[i][j]);
return;
}
printf(" 修改成功!\n");
}
}
/*删除路线*/
void DeleteRoute(MatGraph &g)
{
int i = 0;
int j = 0;
int k = 0;
if(g.n<=1)//1个或0个城市无法添加路线
{
printf(" 目前只有%d个城市,无可修改路线!\n",g.n);
}
printf(" ");
for(i = 0;i<g.n;i++)//输出已有城市信息
{
printf("%d、%s ",g.vexs[i].adjvex+1,g.vexs[i].cityname);
}
printf("\n");
printf(" 请选择要删除路线的两个城市编号:");
scanf("%d%d",&i,&j);
while(i==j||i>g.n||j>g.n)
{
printf(" 输入错误,请重新输入:");
scanf("%d%d",&i,&j);
}
i--;
j--;
if(g.edges[i][j]==INF)//路线不存在则无法删除
{
printf(" %s和%s间不存在路径!\n",g.vexs[i].cityname,g.vexs[j].cityname);
return;
}
g.cost[i][j] = g.cost[j][i] = INF;
g.edges[i][j] = g.edges[j][i] = INF;
g.time[i][j] = g.time[j][i] = INF;
printf(" 删除%s到%s的路线成功!\n",g.vexs[i].cityname,g.vexs[j].cityname);
}
/*输出图路程*/
void DispGraphE(MatGraph g)
{
int i, j;
printf(" ");
for(i = 0;i<g.n;i++)
{
printf("%4s",g.vexs[i].cityname);
}
printf("\n");
for (i = 0; i < g.n; i++)
{
printf("%s ",g.vexs[i].cityname);
for (j = 0; j < g.n; j++)
{
if (g.edges[i][j] <INF)
{
printf("%4d", g.edges[i][j]);
}//if
else
{
printf("%4s", "∞");
}//else
}//for
printf("\n");
}//for
}
/*输出图费用*/
void DispGraphC(MatGraph g)
{
int i, j;
for(i = 0;i<g.n;i++)
{
printf("%s",g.vexs[i].cityname);
}
printf("\n");
for (i = 0; i < g.n; i++)
{
printf("%s",g.vexs[i].cityname);
for (j = 0; j < g.n; j++)
{
if (g.cost[i][j] <INF)
{
printf("%4d", g.cost[i][j]);
}//if
else
{
printf("%4s", "∞");
}//else
}//for
printf("\n");
}//for
}
/*输出图时间*/
void DispGraphT(MatGraph g)
{
int i, j;
for(i = 0;i<g.n;i++)
{
printf("%s",g.vexs[i].cityname);
}
printf("\n");
for (i = 0; i < g.n; i++)
{
printf("%s",g.vexs[i].cityname);
for (j = 0; j < g.n; j++)
{
if (g.time[i][j]<INF)
{
printf("%4d", g.time[i][j]);
}//if
else
{
printf("%4s", "∞");
}//else
}//for
printf("\n");
}//for
}
/*单源最短路径,求从v到k的最短路径*/
void DijkstraE(MatGraph g, int v,int k)
{
int dist[MAXVEX];
int path[MAXVEX];
int S[MAXVEX];
int mindis, i, j, u = 0;
for (i = 0; i < g.n; i++)
{
dist[i] = g.edges[v][i];//距离初始化
S[i] = 0;
if (g.edges[v][i] < INF)//路径初始化
{
path[i] = v;
}
else
{
path[i] = -1;
}
}
S[v] = 1;//源点编号v放入S中
for (i = 0; i < g.n - 1; i++)//循环向S中添加n-1个顶点
{
mindis = INF;//置最小长度初值
for(j = 0;j<g.n;j++)//选取不在S中且具有最小距离的顶点u
{
if (S[j] == 0 && dist[j] < mindis)
{
u = j;
mindis = dist[j];
}
}
S[u] = 1;//顶点u加入S中
for(j = 0;j<g.n;j++)//修改不在S中的顶点的距离
{
if(S[j]==0)
{
if (g.edges[u][j] < INF &&dist[u] + g.edges[u][j] < dist[j])
{
dist[j] = dist[u] + g.edges[u][j];
path[j] = u;
}//if
}//if
}//for
}
DispathE(g,dist,path,S,g.n,v,k);
}
/*求从v到k的最短时间*/
void DijkstraT(MatGraph g, int v,int k)
{
int dist[MAXVEX];
int path[MAXVEX];
int S[MAXVEX];
int mindis, i, j, u = 0;
for (i = 0; i < g.n; i++)
{
dist[i] = g.time[v][i];//时间初始化
S[i] = 0;
if (g.time[v][i] < INF)//路径初始化
{
path[i] = v;
}
else
{
path[i] = -1;
}
}
S[v] = 1;//源点编号v放入S中
for (i = 0; i < g.n - 1; i++)//循环向S中添加n-1个顶点
{
mindis = INF;//置最小时间初值
for(j = 0;j<g.n;j++)//选取不在S中且具有最小时间的顶点u
{
if (S[j] == 0 && dist[j] < mindis)
{
u = j;
mindis = dist[j];
}
}
S[u] = 1;//顶点u加入S中
for(j = 0;j<g.n;j++)//修改不在S中的顶点的时�
没有合适的资源?快使用搜索试试~ 我知道了~
数据结构课程设计_城市交通数据_交通系统课程设计_
共41个文件
tlog:19个
manifest:2个
pdb:2个
4星 · 超过85%的资源 18 下载量 199 浏览量
2021-10-03
12:04:31
上传
评论 10
收藏 831KB RAR 举报
温馨提示
设计一个旅游交通咨询系统,设计完成系统功能菜单;管理员能对城市以及交通路线进 行增加、删除和修改;能让旅客咨询从任一城市顶点到另一个城市的最短路径或最低费用或最少时间等问题。 1、对城市信息进行编辑:增加、删除、修改功能2、对城市间的交通工具:汽车、飞机、火车班次的增添、修改、删除3、三种最有决策:用时最短、消费最少、中转次数最少(仅对同一种交通工具)4、咨询以用户和计算机对话方式进行,用户选择最优决策原则和交通工具,输入起始点以及终点,输出用时最少、消费最少、中转次数等信息。
资源详情
资源评论
资源推荐
收起资源包目录
数据结构课程设计.rar (41个子文件)
课程设计
advisory.cpp 17KB
Debug
cl.command.1.tlog 554B
课程设计.exe.embed.manifest.res 472B
课程设计.ilk 333KB
rc.command.1.tlog 390B
CL.read.1.tlog 2KB
课程设计.lastbuildstate 56B
vc100.idb 43KB
mt.read.1.tlog 106B
link.568-cvtres.read.1.tlog 2B
课程设计.pdb 395KB
link-cvtres.read.1.tlog 2B
link.read.1.tlog 3KB
课程设计.exe.embed.manifest 406B
link.568.read.1.tlog 2B
rc.read.1.tlog 166B
link.write.1.tlog 440B
CL.write.1.tlog 184B
link.568.write.1.tlog 2B
vc100.pdb 60KB
link.command.1.tlog 1KB
mt.write.1.tlog 194B
课程设计.write.1.tlog 0B
课程设计.exe 50KB
advisory.obj 73KB
link.568-cvtres.write.1.tlog 2B
课程设计.log 16KB
mt.command.1.tlog 314B
课程设计.exe.intermediate.manifest 381B
课程设计.Build.CppClean.log 311B
rc.write.1.tlog 174B
课程设计_manifest.rc 198B
link-cvtres.write.1.tlog 2B
课程设计.vcxproj.user 143B
ipch
课程设计-1a40f8d3
课程设计-31c0fb74.ipch 2.31MB
课程设计.vcxproj.filters 1KB
课程设计.vcxproj 4KB
课程设计.suo 18KB
课程设计.sdf 2.21MB
advisory.h 2KB
课程设计.sln 890B
共 41 条
- 1
weixin_42668301
- 粉丝: 45
- 资源: 3993
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3