HDU 2544(简单最短路)
2015-12-03 12:01
246 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2544
同换C,从62到了15MS
要注意下标
/* 使用pair代替结构 */ #include <iostream> #include <cstdio> #include <queue> #include <vector> using namespace std; const int Ni = 10000; const int INF = 1<<27; typedef pair<int,int> pa; int dis[Ni],n;//dis使用1-n的部分 vector<pair<int,int> > eg[Ni]; void Dijkstra(int s) { int i,j; for(i=0;i<=n;i++)//要到n dis[i] = INF; priority_queue<pa> q; //优先级队列:小顶堆 dis[s] = 0; q.push(make_pair(s,dis[s])); while(!q.empty()) { pa x = q.top(); q.pop(); int w = x.first; for(j = 0;j<eg[w].size();j++)//遍历x的所有邻接点 { pa y = eg[w][j];//y是x的邻接点 int u = y.first; if(dis[u]>x.second+y.second) { dis[u] = x.second+y.second; q.push(make_pair(u,dis[u])); } } } } int main() { int m,a,b,d;//关系个数 while(cin>>n>>m,m+n) { for(int i = 0;i<=n;i++) eg[i].clear();//初始化 while(m--) { cin>>a>>b>>d; eg[a].push_back(make_pair(b,d)); eg[b].push_back(make_pair(a,d)); } Dijkstra(1); if(dis !=INF) cout<<dis <<endl; else cout<<"-1\n"; } return 0; }
同换C,从62到了15MS
要注意下标
#include <cstdio> using namespace std; const int L = 1010; const int INF = 1<<27; int map[L][L]; int vis[L]; int dis[L]; int n,m; void Dijkstra(int s) { int i,j,k; int min; for(i = 0;i<=n;i++) { dis[i] = map[s][i]; vis[i] = 0; } vis[s] = 1; dis[s] = 0; for(i = 0;i<=n;i++) { min = INF; for(j = 0;j<=n;j++) { if(dis[j]<min && !vis[j]) { k = j; min = dis[j]; } } vis[k] = 1; for(j = 0;j<=n;j++) { if(dis[j] > min+map[k][j] && !vis[j]) { dis[j] = min+map[k][j]; } } } } void init() { int i,j; for(i = 0;i<=n;i++) { map[i][i] = 0; for(j = i+1;j<=n;j++) { map[i][j] = map[j][i] = INF; } } while(m--) { int a,b,w; scanf("%d%d%d",&a,&b,&w); if(w<map[a][b])//可能有同两点,但不同weight { map[a][b] = w; map[b][a] = w; } } } int main() { while(scanf("%d%d",&n,&m),n+m) { int r,t; init(); Dijkstra(1); if(dis !=INF) printf("%d\n",dis ); else printf("-1\n"); } return 0; }
相关文章推荐
- 小技巧给网页减肥,让网站提速
- 《延世大学韩国语教程2》第二十课 办公室(下)
- iOS开发数据库篇—FMDB简单介绍
- KMP算法
- Modernizr使用指南
- 定时任务中的 Timer的schedule和scheduleAtFixedRate方法的区别
- RxJava的简单学习(学习自扔物线)
- 火狐浏览器下请求两次(C#)
- linux的vim按了ctrl+s之后假死的解决办法
- 用Python抢枪过年的火车票
- 用Python抢枪过年的火车票
- Collection:Set集合
- WPF自定义控件与样式(14)-轻量MVVM模式实践
- sqlserver 内置函数
- mysql分表和表分区详解
- apache工作模式prefork参数配置
- xshell 使用pem文件登录
- python 科学计算Numpy的自学(一)
- Windows-----Word设置链接到其他位置
- Linux原始套接字----ping命令的实现