HDU2544 最短路 + 裸 + dijkstra + 邻接矩阵
2016-04-17 18:23
447 查看
1)
//hdu 2544,裸dijkstra #include <iostream> #include <string.h> using namespace std; const int maxn=120; const int INF=999999; int lukou[maxn][maxn]; int visted[maxn];//区别该点是否进入确定的集合之中 int d[maxn];//目前从起点出发,到第i点的最短距离 int dijkstra(int s,int n){ visted[s]=1;//1进入集合 for(int i=1;i<=n;i++){ d[i]=lukou[s][i];//因为1是起点,所以我们先把这个点放入确定的集合之中,也就得到了目前所知的从起点出发,到其他点的初始距离 //cout<<i<<":"<<d[i]<<endl; } for(int k=1;k<=n-1;k++){ int jilu; int minn=INF; //从起点出发,找出从起点到其他未加入集合中的点i的最短距离的d[i] for(int i=1;i<=n;i++){ if(!visted[i]&&minn>d[i]){ minn=d[i]; jilu=i; } } visted[jilu]=1;//将该点放入确定的点集中 //因为新加入点,更新从起点出发经过新加入的点到其他的未加入集合的点的距离 for(int i=1;i<=n;i++){ if(!visted[i]&&d[i]>d[jilu]+lukou[jilu][i]){ d[i]=d[jilu]+lukou[jilu][i]; } } //继续外层for循环,知道循环n-1次,代表找到了最短路径(因为极端情况下从第一个点到最后一个点,最短路径最少经过n-1条边,这一点和bellmanford 最外层的v-1次循环是一个到道理(v是点的个数)) } return d ; } int main() { int n,m; while(cin>>n>>m&&n!=0){ int a,b,v; int s=1;//起点 memset(visted,0,sizeof(visted)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j){ lukou[i][j]=0; } else lukou[i][j]=INF; } } for(int i=1;i<=m;i++){ cin>>a>>b>>v; lukou[a][b]=v; lukou[b][a]=v; } cout<<dijkstra(s,n)<<endl; } return 0; }
相关文章推荐
- Linux性能测试命令系列(1)- top
- Java进阶学习第五天——XML入门
- [java基础]final关键字
- js---匿名函数和闭包
- angularjs结合localstorage完成一个简单的备忘录
- 求gcd(i,j,k)=m的方案数,i,j,k不同且属于1-n(组合数学+筛法(倍数法))
- 浅谈HashMap
- OpenCV坐标体系的初步认识
- HDU2544 最短路 + 裸 + Bellman-ford + 链表存储
- 手算KMP匹配的Next值和Nextval值
- 如何学习java
- PhantomJS
- 开启hive数据表的update delete
- Win10中的IIS10安装php manager和IIS URL Rewrite
- View的事件分发机制
- Python学习笔记2-flask-sqlalchemy 简单笔记
- 提高PHP代码质量的36个技巧
- 面试:数组:插入区间:057
- 线程与进程
- 讯飞语音 Great!!!