POJ2387 简单的Dijkstra入门
来源:互联网 发布:沙宝亮 知乎 编辑:程序博客网 时间:2024/06/05 16:42
题意
输入两个数字,第一个数字为m,代表边的个数,第二个数字为n,代表点的个数,输入m条边,求最短路
题解
Dijkstra模板题。N次循环,每次循环挑选距离起始点最短且未访问的点,然后更新与此点有关的所有未访问的点到起始点的距离。N次循环后,便可得出起始点到任意一点的最短距离。
注意事项
此题要注意重边的情况,需要在边输入时,对重边进行过滤。还要注意,第一个数字为m,代表边的个数,第二个才是n,代表点的个数。
代码
#include <iostream>#include<cstdio>#include<algorithm>#define MAX_N 1010#define MAX_M 2010#define INF 1e9using namespace std;int d[MAX_N];bool visited[MAX_N];int w[MAX_M][MAX_M];int n,m;void dijkstra(int s){ for(int i=1;i<=n;i++) d[i]=INF; d[s]=0; for(int i=0;i<n;i++){ int x=0,maxx=-1; for(int j=1;j<=n;j++){ if(!visited[j]&&(maxx==-1||maxx>d[j])){ maxx=d[x=j]; } } visited[x]=true; for(int j=1;j<=n;j++){ if(!visited[j]){ d[j]=min(d[x]+w[x][j],d[j]); } } }}int main(){ scanf("%d%d",&m,&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ w[i][j]=INF; } } for(int i=0;i<m;i++){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(w[a][b]>c) w[a][b]=w[b][a]=c; } dijkstra(1); printf("%d\n",d[n]); return 0;}
0 0
- POJ2387 简单的Dijkstra入门
- poj2387-Til the Cows Come Home dijkstra入门水题
- poj2387 Dijkstra模板程序
- poj2387(最简单的最短路)
- poj2387-最短路dijkstra算法
- POJ2387 Til the Cows Come Home【Dijkstra】
- POJ2387----Til the Cows Come Home(dijkstra)
- poj2387解题报告(Dijkstra算法)
- 最短路 dijkstra算法 poj2387 bellman_ford spfa
- 最简单的Dijkstra
- POJ2387
- poj2387
- poj2387
- poj2387
- poj2387
- POJ2387
- poj2387
- poj2387
- 回调函数
- HashSet
- python爬虫基础-Cookies
- sqlcmd 参数详解
- Python 学习所遇问题
- POJ2387 简单的Dijkstra入门
- hdu1728 逃离迷宫 --bfs
- RtlSetProcessIsCritical将进程设置为系统严重状态(防止进程被结束)
- Apache zookeeper 入门学习到Apache Curator
- 卡普雷卡数
- 第二次计数器作业
- JavaScript学习笔记5--数组
- 域名解析中A记录、CNAME、MX记录、NS记录的区别和联系
- LeetCode 468. Validate IP Address