HDU2066:一个人的旅行(Dijkstra)
2016-04-13 18:17
344 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2066
代码:
智障了,刚开始以多个源点算的,WA,后来看了题解可以将源点连在一起。
在Dijk。智商-2.
代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int inf=1<<30; int T,S,D,n; int maps[1111][1111]; int vis[1111]; int cast[1111]; int s[1111],e[1111]; void Dijkstra() { int i,j,minn,pos; memset(vis,0,sizeof(vis)); vis[0]=1; for(i=0;i<=n;i++) cast[i]=maps[0][i]; for(i=1;i<=n;i++) { minn=inf; for(j=1;j<=n;j++) { if(cast[j]<minn&&!vis[j]) { pos=j; minn=cast[j]; } } vis[pos]=1; for(j=1;j<=n;j++) { if(cast[pos]+maps[pos][j]<cast[j]&&!vis[j]) cast[j]=cast[pos]+maps[pos][j]; } } } int main() { int i,j,x,y,z,start,end; while(~scanf("%d%d%d",&T,&S,&D)) { n = 0; for(i = 0; i<1111; i++) { for(j = 0; j<1111; j++) maps[i][j] = inf; maps[i][i] = 0; } while(T--) { scanf("%d%d%d",&x,&y,&z); n = max(max(n,x),y); if(z<maps[x][y]) maps[x][y] = maps[y][x] = z; } int minn = inf; for(i = 0; i<S; i++) { scanf("%d",&s[i]); maps[0][s[i]] = maps[s[i]][0] = 0; } for(i = 0; i<D; i++) scanf("%d",&e[i]); Dijkstra(); for(i = 0; i<D; i++) minn = min(minn,cast[e[i]]); printf("%d\n",minn); } }
智障了,刚开始以多个源点算的,WA,后来看了题解可以将源点连在一起。
在Dijk。智商-2.
相关文章推荐
- Pentaho Work with Big Data(五)—— 格式化原始web日志
- clustered index
- git找到丢失的commit
- 横向ProgressBar进度条的设置
- Linear Programming Learning Notes (2) The Simplex Method
- hbase shell基础和常用命令详解
- Mybatis动态sql语句
- Go编程
- Spring事务异常回滚,捕获异常不抛出就不会回滚
- MySQL数据库乱码问题
- 学习scala的点点滴滴-模式匹配
- 【算法】PHP实现经典算法(下)
- Swift学习笔记(一)
- ultraedit使用正则
- 【转】常用正则表达式
- Unity5.3.4 设置Raycast投射的射线不碰撞触发器Trigger
- 线程的理解
- 【NodeJs】Ctrl+C在Linux平台和Windows平台下的TCP连接中的不同表现
- AppCan移动应用开发平台新增9个超实用插件(内含示例代码)
- Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机)