Dijkstra的实现(用vector模拟邻接链表)
2013-03-22 22:53
337 查看
#include<stdio.h> #include<vector> usingnamespacestd; structE{ intnext;//代表直接相邻的结点 intc; }; vector<E>edge[101];//邻接链表 boolmark[101]; intDis[101]; intmain(){ intn,m; while(scanf("%d%d",&n,&m)!=EOF){ if(m==0&&n==0)break; for(inti=1;i<=n;i++)edge[i].clear(); inta,b,c; while(m--){ scanf("%d%d%d",&a,&b,&c); Etmp; tmp.c=c; tmp.next=b; edge[a].push_back(tmp); tmp.next=a; edge[b].push_back(tmp); } for(inti=1;i<=n;i++){ Dis[i]=-1; mark[i]=false; } Dis[1]=0;mark[1]=true; intnewP=1; for(inti=1;i<n;i++){ for(intj=0;j<edge[newP].size();j++){ intt=edge[newP][j].next; intc=edge[newP][j].c; if(mark[t]==true)continue; if(Dis[t]==-1||Dis[t]>Dis[newP]+c) //若该结点尚不可达,或者从新加入的结点经过一条边到达时比以往更近 Dis[t]=Dis[newP]+c; } intmin=123123123; for(intj=1;j<=n;j++){ if(mark[j]==true)continue; if(Dis[j]==-1)continue; if(Dis[j]<min){ min=Dis[j]; newP=j; } } mark[newP]=true; } printf("%d\n",Dis ); } return0; }
以前只是用邻接矩阵实现过。。学习了。。。
相关文章推荐
- 九度 OJ 1447 题 最短路径问题 Dijkstra(迪杰斯特拉)算法实现,使用vector模板模拟邻接链表
- HDOJ 1874 畅通工程续——结构体模拟邻接链表的SPFA算法
- 用邻接链表实现图时,二级指针的误用
- 【STL】 vector 模拟实现
- <STL>模拟实现Vector
- 模拟实现STL (双)链表
- 一步一步学数据结构之n--n(图--邻接链表法实现)
- 对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector
- vector的基本模拟实现
- STL--> list 双向循环链表容器 接口使用及介绍。 模拟实现 STL list容器
- 基于邻接链表的图的广度优先搜索Java实现
- 约瑟夫圆环的两种实现,数组模拟和链表模拟
- HDU 2544 最短路(单源最短路 dijkstra / floyd / dijkstra(堆优化)/dijkstra+邻接链表+堆优化)
- 重温数据结构系列随笔:单链表(c#模拟实现)
- Java模拟单向链表和双向链表的实现
- poj3159差分约束+栈实现的spfa+邻接链表
- STL中vector的使用以及模拟实现
- 【啊哈!算法】算法8:巧妙的邻接表(数组实现逆序模拟链表)
- [置顶] 从零开始学C++之对象语义与值语义、资源管理(RAII、资源所有权)、模拟实现auto_ptr<class>、实现Ptr_vector .
- 类模板模拟实现STL中Vector