Dijkstra模板题,也可以用Floyd算法。

关于Dijkstra算法有两种写法,只有一点细节不同,思想是一样的。

写法1:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
using namespace std;
#define N 1007 int mp[N][N],n,m;
int dis[N],vis[N]; void Dijastra(int s)
{
int now = s;
int i,k;
dis[now] = ;
vis[now] = ;
for(i=;i<=n;i++)
{
for(k=;k<=n;k++) //order 1
{
if(mp[now][k] != Mod && dis[now] + mp[now][k] < dis[k])
dis[k] = dis[now] + mp[now][k];
}
int mini = Mod; //order 2
for(k=;k<=n;k++)
{
if(dis[k] < mini && !vis[k])
{
now = k;
mini = dis[k];
}
}
vis[now] = ;
}
} int main()
{
int u,v,w,i,j;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=;i<=n;i++)
dis[i] = Mod;
dis[] = ;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
mp[i][j] = Mod;
mp[i][i] = ;
}
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
if(w < mp[u][v])
mp[u][v] = mp[v][u] = w;
}
memset(vis,,sizeof(vis));
Dijastra();
printf("%d\n",dis[n]);
}
return ;
}

写法2:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define Mod 1000000007
using namespace std;
#define N 1007 int mp[N][N],n,m;
int dis[N],vis[N]; void Dijastra(int s)
{
int now;
int i,k;
dis[s] = ;
for(i=;i<=n;i++)
{
int mini = Mod; //order 1
for(k=;k<=n;k++)
{
if(dis[k] < mini && !vis[k])
{
now = k;
mini = dis[k];
}
}
vis[now] = ;
for(k=;k<=n;k++) //order 2
{
if(mp[now][k] != Mod && dis[now] + mp[now][k] < dis[k])
dis[k] = dis[now] + mp[now][k];
}
}
} int main()
{
int u,v,w,i,j;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=;i<=n;i++)
dis[i] = Mod;
dis[] = ;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
mp[i][j] = Mod;
mp[i][i] = ;
}
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
if(w < mp[u][v])
mp[u][v] = mp[v][u] = w;
}
memset(vis,,sizeof(vis));
Dijastra();
printf("%d\n",dis[n]);
}
return ;
}

最新文章

  1. 自动化小应用系列----利用selenium启动多个独立的浏览器
  2. 针对不同的Cookie做页面缓存
  3. 1027: [JSOI2007]合金 - BZOJ
  4. java读取properties
  5. 【转】Linux下svn的常用工作流程
  6. ASP.NET mvc 遇见的问题
  7. ViewPager的Adapter中视图重用
  8. Eclipse启动后一直Initializing Java Tooling (1%)
  9. ORA-00913错误:PL/SQL: ORA-00913: too many values
  10. org.springframework.transaction.CannotCreateTransactionException
  11. Windows API 之 GetStartupInfo 、CreateProcess
  12. 玩转UITableView系列(一)--- 解耦封装、简化代码、适者生存!
  13. 阿里云VPS搭建Hexo博客
  14. 14. 监视ZooKeeper实例
  15. Delphi 2010 新增功能之: IOUtils 单元(6): TPath(结构体) 的方法与属性
  16. 搭建React项目(一):在网页中使用
  17. SPSS SAS 是什么?
  18. ubuntu系列-安装google浏览器
  19. POJ1860:Currency Exchange(BF)
  20. [转] 遇见 TiDB - 分布式关系数据库

热门文章

  1. 我所了解的WEB开发(2) - PS切片
  2. 将 C# 编译为原生机器码
  3. winform(多窗体、菜单和工具栏)
  4. 常用 windows运行命令
  5. Android v4、v7、v13 的区别
  6. File类的常用方法
  7. C语言预处理命令之条件编译
  8. 【读书笔记】iOS-对象初始化
  9. Charles使用详情
  10. 演示 pull解析的基本步骤(代码演示)