畅通工程续(最短路径)
2015-06-30 18:23
459 查看
这一题有点坑!就是如果两个点一样你得输出0,一直WA,最后发现了,我去!
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int infinity=0x3f3f3f3f; const int maxnum=2010; int map[maxnum][maxnum];//记录两个点的距离 int vis[maxnum];//记录某一个点是否被访问! int dis[maxnum];//记录某一个点到第一个点的距离! int n,m; int djsta(int x,int y) { int i,j,mins,p; for(i=0;i<n;i++) { dis[i]=map[x][i];//记录某一个点到第一个点的距离! } memset(vis,0,sizeof(vis));//默认都未被访问! vis[x]=1; for(i=0;i<n;i++) { mins=infinity; for(j=0;j<n;j++) { if(!vis[j]&&dis[j]<mins) { p=j; mins=dis[j]; } } vis[p]=1; for(j=0;j<n;j++) { if(!vis[j]&&dis[p]+map[p][j]<dis[j]) { dis[j]=dis[p]+map[p][j]; } } } return dis[y]; } int main() { int i,a,b,v,ans,j,s,e; while(cin>>n>>m) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { map[i][j]=infinity;//设置最大值 } } for(i=0;i<m;i++) { cin>>a>>b>>v; if(map[a][b]>v) { map[a][b]=map[b][a]=v;//标记路径! } } cin>>s>>e; if(s==e) { cout<<0<<endl; continue; } ans=djsta(s,e); if(ans==infinity) { cout<<-1<<endl; } else { cout<<ans<<endl; } } }
相关文章推荐
- NYOJ 366 D的小L(从小到大输出排列。STL,next_permutation()函数的学习)
- Log4Net指南
- 异或运算的应用
- 将json对象数据保存到数据库对应的表中
- cell复用,状态改变
- 漫谈SOA(面向服务架构)
- 汇编语言:第五章 [BX]和loop指令
- 线程操作之生产者及消费者
- 【java0010】一张图看懂java集合
- JSP基本语法
- 当工作累了,看看这个
- C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher
- python super()
- Ganglia监控Hadoop集群的安装部署
- mongodb安装配置及副本集的操作
- linux route命令的使用详解
- Android开发学习笔记之窗口操作
- 用PDB库调试Python程序
- DEV-aspxgridview中添加detailrow
- Register DLL Assembly Gacutil.exe(全局程序集缓存工具)