题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=2680

题目大意:

给你一个有向图,一个起点集合,一个终点,求最短路

解题思路:

1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1个点的单源最短路算法。。。。。

2.反向图+终点的Dijkstra,然后记录最小值。

注意:重边处理

思路1:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn];
int n, m, s;
int d[maxn], v[maxn];
void dijkstra()
{
memset(v, , sizeof(v));
for(int i = ; i <= n; i++)d[i] = INF;
d[] = ;//源点是0
for(int i = ; i <= n; i++)//n+1个点,循环n+1次
{
int x = , m = INF;
for(int j = ; j <= n; j++)if(!v[j] && d[j] < m)m = d[x = j];
v[x] = ;
for(int j = ; j <= n; j++)
{
d[j] = min(d[j], d[x] + Map[x][j]);
}
}
if(d[s] == INF)cout<<"-1"<<endl;
else cout<<d[s]<<endl;
}
int main()
{
while(cin >> n >> m >> s)
{
int u, v, w;
memset(Map, INF, sizeof(Map));
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
Map[u][v] = min(Map[u][v], w);//注意重边
}
scanf("%d", &w);
while(w--)
{
scanf("%d", &u);
Map[][u] = ;//建立超级源点0
}
dijkstra();
}
return ;
}

思路2:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = + ;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn];
int n, m, s;
int d[maxn], v[maxn];
void dijkstra()
{
memset(v, , sizeof(v));
for(int i = ; i <= n; i++)d[i] = INF;
d[s] = ;
for(int i = ; i < n; i++)
{
int x = , m = INF;
for(int j = ; j <= n; j++)if(!v[j] && d[j] < m)m = d[x = j];
v[x] = ;
for(int j = ; j <= n; j++)
{
d[j] = min(d[j], d[x] + Map[x][j]);
}
}
}
int main()
{
while(cin >> n >> m >> s)
{
int u, v, w;
memset(Map, INF, sizeof(Map));
while(m--)
{
scanf("%d%d%d", &u, &v, &w);
Map[v][u] = min(Map[v][u], w);//反向建图
}
dijkstra();
scanf("%d", &w);
int ans = INF;
while(w--)
{
scanf("%d", &u);
ans = min(ans, d[u]);
}
if(ans == INF)ans = -;
printf("%d\n", ans);
}
return ;
}

最新文章

  1. Visual Studio Code 1.0发布:100+语言,300+pull请求,1000+扩展
  2. getPos,offsetTop
  3. 使用MiniProfiler调试ASP.NET MVC网站性能
  4. 【C#学习笔记】Hello World
  5. hdu-5680 zxa and set(水题)
  6. json &lt;---&gt;List集合,实体类 之间的相互转换
  7. 《JavaScript 闯关记》之 DOM(上)
  8. div模拟textarea以实现高度自适应实例页面
  9. .Net 数组去除重复项
  10. json对象、构造原型、组合继承
  11. Dynamics CRM 本地插件注册器连CRMAn unsecured or incorrectly secured fault was received from the other party
  12. 回归树(Regression Tree)
  13. Java的selenium代码随笔(5)
  14. vue项目中如何使用多语言(vue-i18n)
  15. MongoDB----提升
  16. [No000018F]Vim自动缩进配置、原理和tab键替换空格-Vim使用技巧(4)
  17. php输出语句
  18. windows下的MySql实现读写分离
  19. lua -- encode and decode
  20. mysql中查看数据库的版本,什么版本

热门文章

  1. JS中的for....in循环 和 for ...of循环以及iterable遍历Map和Set
  2. CodeForces 125D【鸽巢原理】
  3. poj3694(lca + tarjan求桥模板)
  4. 2017-10-1 清北刷题冲刺班a.m
  5. WampServer的安装
  6. IdentityServer4 学习笔记[1]-客户端授权
  7. SVN历史版本比较中文乱码
  8. crawlspider的源码学习
  9. unity ForceMode
  10. Linux Bash 命令行快捷键小结