#include <stdlib.h>
#include<iostream>
#include<stdio.h>
using namespace std;
#define INFINITY 9999
#define MAX 10
void dijkstra(int G[MAX][MAX],int n,int startnode)//n为顶点个数
{
int cost[MAX][MAX],distance[MAX],pred[MAX];
int visited[MAX],count,mindistance,i,j;
//pred[] 记录前驱结点
//count记录已经找到最短路径的结点个数 visited[]标记到该点是否已找到最短路径,1为已找到
//设置权值
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(G[i][j]==0)
cost[i][j]=INFINITY;
else
cost[i][j]=G[i][j];
//初始化 pred[],distance[],visited[]
for(i=0;i<n;i++)
{
distance[i]=cost[startnode][i];///distance是开始结点到每个顶点的距离
pred[i]=startnode;
visited[i]=0;
}
distance[startnode]=0;
visited[startnode]=1;
count=1;
while(count<n-1)
{
mindistance=INFINITY;
int u = startnode;// 找出当前未使用的点j的dist[j]最小值
for(int j=1; j<=n; ++j)
if(visited[j]==0 && distance[j]<mindistance)
{
u = j; // u保存当前邻接点中距离最小的点的号码
mindistance = distance[j];
}
visited[u]=1 ;
for(int j=1; j<=n; j++)
if( visited[j]==0 && cost[u][j]<INFINITY)//如果该点还没有找到最短路径,且和u点之间可达
{
if(distance[u] + cost[u][j] < distance[j]) //在通过新加入的u点路径找到离v0点更短的路径
{
distance[j] = distance[u] + cost[u][j]; //更新distance
pred[j] = u; //记录前驱顶点
}
}
count++;
}
//输出路径和结点
for(i=0;i<n;i++)
if(i!=startnode)
{
printf("\n结点%d和结点%d之间的最小距离是%d",startnode,i,distance[i]);
printf("\n路径:%d",i);
j=i;
do
{
j=pred[j];
printf("<-%d",j);
}while(j!=startnode);
printf("\n");
}
}
int main()
{
int n,m;//顶点个数
int G[MAX][MAX];
int i,j;
cout<<"请输入结点数量:"<<endl;
cin>>n;
cout<<"请输入开始的结点:"<<endl;
cin>>m;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
G[i][j]=rand()%50;
cout<<"结点之间的距离关系(结点1 结点2 距离)为:"<<endl;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cout<<i<<" "<<j<<" "<<G[i][j]<<endl;
dijkstra(G,n,m);//G为带权无向图,n为顶点个数,0为开始结点
system("pause");
return 0;
}
weixin_46138380
- 粉丝: 10
- 资源: 12
最新资源
- 基于Go-micro微服务的秒杀系统详细文档+优秀项目+全部资料.zip
- 基于golang实现在线客服系统,包含用户端(h5,微信小程序),客服端(PC),方便跟已有的系统整合。适用于小程序自带的客服系统无法满足或有多端业务需求的情况详细文档+优秀项目+全部资料.zip
- 基于gorillawebsocket封装的websocket库,实现基于系统维度的消息推送,基于群组维度的消息推送,基于单个和多个客户端消息推送详细文档+优秀项目+全部资料.zip
- 基于Go-Zero + Vue3 + TypeScript + Element-Plus开发的简单高效权限管理系统详细文档+优秀项目+全部资料.zip
- 基于Go-Zero Nestjs + Vue3 + TypeScript + Element-Plus开发的简单高效权限管理系统详细文档+优秀项目+全部资料.zip
- linux常用命令大全.txt
- 基于go-zero的影票售卖系统详细文档+优秀项目+全部资料.zip
- 基于Go-Zero + vue-element-admin的前后端分离微服务管理系统的前端模块详细文档+优秀项目+全部资料.zip
- 基于go-zero 框架实现的电商系统的后端服务详细文档+优秀项目+全部资料.zip
- 基于go-zero实现的网盘系统详细文档+优秀项目+全部资料.zip
- 基于go-zero框架数据中台系统详细文档+优秀项目+全部资料.zip
- 基于go-zero和gorm开发的分布式微服务后端权限管理系统脚手架。十分合适新手入手go-zero、gorm、casbin、jwt等。详细文档+优秀项目+全部
- 基于Go的WebSocket直播间推送系统详细文档+优秀项目+全部资料.zip
- 基于Go和GraphQL的微型进销存系统:服务器端(基于Golang,GraphQL,GORM,jwt-go等开发)详细文档+优秀项目+全部资料.zip
- 基于go的自托管博客系统详细文档+优秀项目+全部资料.zip
- 基于go开发的分布式高并发web电商系统详细文档+优秀项目+全部资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0