没有合适的资源?快使用搜索试试~ 我知道了~
首页交通安全 c或c++交通咨询系统,能让旅客咨询从任一个城市到另一个城市之间的最短路径
交通安全 c或c++交通咨询系统,能让旅客咨询从任一个城市到另一个城市之间的最短路径
![](https://csdnimg.cn/release/wenkucmsfe/public/img/star.98a08eaa.png)
全国交通旅游点 c或c++交通咨询系统,能让旅客咨询从任一个城市到另一个城市之间的最短路径
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/3053327/bg1.jpg)
题目:路径设计问题
要求:已知若干个城市的地图,如图所示,求从沈阳到广州的路径,要求路径
中经过的城市最少,画出如图所示的路径网络图,然后动态显示所选择的路径。
问题补充:
正确多给分!!!
最佳答案
这是一个最短路径的问题。你把每条路径的权值都当是 1.
最终的问题就是求最短路径(此时经过的城市点与路径长度是对应的)。
最后输入路径就行了。
我暂时不能给你具体实现,如果需要就等我闲下来再写。
现在只给你一个求最短路径的参考。
可以去我的博客去看。里面有具体的实现(www.ourys.com/sword)
程序如下:
//*****栈的实现
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int Status;
typedef int QElemType;
typedef struct SqStack{
QElemType *base;
QElemType *top;
int stacksize;
}SqStack;
void InitStack(SqStack *S)
{
(*S).base = (QElemType *)malloc(STACK_INIT_SIZE * sizeof(QElemType));
if(!(*S).base) exit(0);
(*S).top = (*S).base;
(*S).stacksize = STACK_INIT_SIZE;
}
void DestroyStack(SqStack *S)
{
free((*S).base);
}
![](https://csdnimg.cn/release/download_crawler_static/3053327/bg2.jpg)
void ClearStack(SqStack *S)
{
(*S).top = (*S).base;
}
Status StackEmpty(SqStack *S)
{
if((*S).top == (*S).base) return 1;
else return 0;
}
Status StackLength(SqStack *S)
{
return ((*S).top - (*S).base);
}
QElemType GetTop(SqStack *S,QElemType e)
{
if((*S).top != (*S).base)
{
e = *((*S).top - 1);
return e;
}
else printf("ERROR");
}
void Push(SqStack *S,QElemType e)
{
if((*S).top - (*S).base >= (*S).stacksize)
{
(*S).base = (QElemType *)realloc((*S).base,((*S).stacksize +
STACKINCREMENT) * sizeof(QElemType));
if(!(*S).base) exit(0);
(*S).top = (*S).base + (*S).stacksize;
(*S).stacksize += STACKINCREMENT;
}
*(*S).top++ = e;
}
QElemType Pop(SqStack *S)
{
if((*S).top == (*S).base) printf("ERROR");
else
![](https://csdnimg.cn/release/download_crawler_static/3053327/bg3.jpg)
{
QElemType e = * --(*S).top;
return e;
}
}
//End Stack
typedef struct graph
{
int vexnum;
int arcnum;
QElemType *vex;
int **AdjMatrix;
}graph;
void CreateUDN(graph *G)
{
printf("输入图的顶点数和边数:\n");
scanf("%d%d",&((*G).vexnum),&((*G).arcnum));
QElemType v1,v2;
int i,j,m,n;
(*G).vex = (QElemType *)malloc((*G).vexnum * sizeof(QElemType));
(*G).AdjMatrix = (int **)malloc((*G).vexnum * sizeof(int *));
for(i = 0;i < (*G).vexnum;i++)
(*G).AdjMatrix[i] = (int *)malloc((*G).vexnum * sizeof(int));
for(i = 0;i < (*G).vexnum;i++)
for(j = 0;j < (*G).vexnum;j++)
(*G).AdjMatrix[i][j] = 10000; //用大数模拟无穷大
printf("输入各顶点表示的含义(如 1 表示第顶点,2 表示第 2 个):\n");
for(i = 0;i < (*G).vexnum;i++)
scanf("%d",&((*G).vex[i]));
printf("输入无向图各条边依附的两点:\n");
for(i = 0;i < (*G).arcnum;i++)
{
scanf("%d%d",&v1,&v2);
for(j = 0;j < (*G).vexnum;j++)
{
if(v1 == (*G).vex[j]) m = j;
if(v2 == (*G).vex[j]) n = j;
}
(*G).AdjMatrix[m][n] = (*G).AdjMatrix[n][m] = 1;
}
}
![](https://csdnimg.cn/release/download_crawler_static/3053327/bg4.jpg)
void Shortestpath_DIJ(graph *gph,QElemType data1,QElemType data2)
{
int i,j,v,u,k,min;
SqStack S;
InitStack(&S);
int *spath = (int *)malloc((*gph).vexnum * sizeof(int));
int *pathrecord = (int *)malloc((*gph).vexnum * sizeof(int));
bool *visited = (bool *)malloc((*gph).vexnum * sizeof(bool));
for(i = 0;i < (*gph).vexnum;i++) visited[i] = false;
for(i = 0;i < (*gph).vexnum;i++)
{
if(data1 == (*gph).vex[i]) v = i;
if(data2 == (*gph).vex[i]) u = i;
}
for(i = 0;i < (*gph).vexnum;i++)
{
spath[i] = (*gph).AdjMatrix[v][i];
pathrecord[i] = v;
}
spath[v] = 0;visited[v] = true;pathrecord[v] = -1;
for(i = 1;i < (*gph).vexnum;i++)
{
min = 10000;
for(j = 0;j < (*gph).vexnum;j++)
{
if(!visited[j])
{
if(spath[j] < min) {min = spath[j];k = j;}
}
}
visited[k] = true;
for(j = 0;j < (*gph).vexnum;j++)
if(!visited[j] && (*gph).AdjMatrix[k][j] < 10000 && spath[k]+
(*gph).AdjMatrix[k][j] < spath[j])
{
spath[j] = spath[k]+(*gph).AdjMatrix[k][j];
pathrecord[j] = k;
}
}
free(visited);
Push(&S,u);
for(v = pathrecord[u];v != -1;v = pathrecord[v])
Push(&S,v);
![](https://csdnimg.cn/release/download_crawler_static/3053327/bg5.jpg)
while(!StackEmpty(&S))
{
i = Pop(&S);
printf("%d ",(*gph).vex[i]);
}
printf("\n");
DestroyStack(&S);
free(spath);
free(pathrecord);
}
void main()
{
graph G;
CreateUDN(&G);
printf("输入起点和终点:\n");
QElemType data1,data2;
scanf("%d%d",&data1,&data2);
printf("经过的点如下:\n");
Shortestpath_DIJ(&G,data1,data2);
}
模拟运行如下:
输入顶点数和边数 4,6
输入顶点的数据:(如 1 表示沈阳,2 表示大连,自己规定)1,2,3,4
输入各边依附的两点:(1,2),(1,4),(1,3),(2,3),(2,4),(3,4)
输入起点和终点:1 3
可得到所求的经过的最少顶点(包含了起点和终点)
这是在 VC6.0 可以运行。如果你的编译器运行不了,再跟我说
#include<iostream>
#dene INFINITY 999
using namespace std;
class Graph
{
private:
剩余27页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/a18dca978a5e4bfdb702ee563d1d90f6_chenzhongmin7805077.jpg!1)
全栈进行时
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)