博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dijkstra
阅读量:5118 次
发布时间:2019-06-13

本文共 1584 字,大约阅读时间需要 5 分钟。

寻找从源结点到其他点之间的最短距离。

把给出的结点分成两组,一组a刚开始为空,另一组b为全部节点,dis[i]记录从源点到i结点的距离,同样当所有操作结束后dis[i]就是到达源点的最短距离啦,每次更新的时候dis[i]的距离都会缩小。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int inf=0x3f3f3f3f; 7 int e[100][100],vis[100],dis[100]; 8 int main() 9 {10 int m,n;11 int a,b,c;12 while(cin>>n>>m){13 14 15 ///初始化16 for(int i=1;i<=n;i++){17 for(int j=1;j<=n;j++){18 if(i==j)e[i][j]=0;19 else20 e[i][j]=inf;21 }22 }23 24 25 for(int i=1;i<=m;i++){26 cin>>a>>b>>c;27 e[a][b]=c;///c为边a到b的距离28 vis[i]=0;29 }30 for(int i=1;i<=n;i++)31 dis[i]=e[1][i];32 vis[1]=1;///此处的样例代码我们假设1为源点33 34 int u;35 for(int k=1;k<=n-1;k++){
///n个结点要遍历n-1次36 int minn=inf;37 ///每次都查找距离1最近的结点38 for(int i=1;i<=n;i++){39 if(minn>dis[i]&&vis[i]==0){40 minn=dis[i];41 u=i;42 }43 }44 vis[u]=1;45 for(int v=1;v<=n;v++){46 if(e[u][v]
dis[u]+e[u][v])48 dis[v]=dis[u]+e[u][v];49 }50 }51 }52 for(int i=1;i<=n;i++)53 cout<
<<" ";54 }55 56 }
View Code

 

转载于:https://www.cnblogs.com/shangjindexiaoqingnian/p/5866309.html

你可能感兴趣的文章
加密接口如何测试?
查看>>
Dubbo和kafka的基本原理和测试方法
查看>>
http和https的区别
查看>>
接口自动化之数据依赖
查看>>
自动化框架之pytest
查看>>
jmeter(1)添加header和cookie
查看>>
jmeter接口上传图片功能
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
Vue 利用指令实现禁止反复发送请求
查看>>
找到树中指定id的所有父节点
查看>>
使用Xcode的Targets来管理开发和生产版本的构建
查看>>
今天新开通了博客
查看>>
Linux命令应用大词典-第4章 目录和文件操作
查看>>
A + B Problem II
查看>>
app与服务端通信时如何进行消息校验
查看>>
AS3优化性能笔记二
查看>>
wpf combobox
查看>>
mentohust 使用
查看>>
【BZOJ3158】千钧一发 最小割
查看>>
chrome备份网站
查看>>