hdu 2544
#include <iostream> #include <cstdio> #define INF 9999999 //#define INF 0x3f3f3f3 using namespace std; int vis[200],dis[200],Map[200][200]; int dijkstra(int n,int x) { int i,j,p,Min; for(i=1;i<=n;i++) { dis[i]=Map[1][i]; vis[i]=0; } vis[x]=1; for(i=1;i<=n;i++) { Min=INF; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]<Min) { p=j; Min=dis[j]; } vis[p]=1; for(j=1;j<=n;j++) if(!vis[j]&&dis[p]+Map[p][j]<dis[j]) dis[j]=dis[p]+Map[p][j]; } } int main() { int n,m,t,i,j,a,b; while(cin>>n>>m&&n+m) { { for(i=1;i<=n;i++) for(j=1;j<=n;j++) Map[i][j]=INF; } while(m--) { cin>>a>>b>>t; Map[a][b]=t; Map[b][a]=t; } dijkstra(n,1); cout<<dis[n]<<endl; } return 0; }
这个是hdu 2544
//上面的是florde算法,代码少,比较简单,可是效率低,时间复杂度比dijkstra算法高
暑假敲这个代码的时候,没有太关注dijkstra,刚开学,复习这一章的时候,顺便看了下,
就觉得现在理解好简单啊,果然没有florde抽象,输入输出就不说了,整个dijkstra过程,
就是先从第一个点开始,用数组dis标记好距离,vis记忆,然后就是一个for循环里面嵌套
两个for循环,第一个求最短的距离,标记好那个点p,然后下面那个for按我的理解来说,
也就是松弛处理。。。。还有那个prim算法和kruskal算法,还不是那么明白。。。。继续复习呗
(/ □ \)