HOJ2544 最短路【Dijkstra】
最简单的dijkstra练习。
都是模板。
练习几遍,加深理解记忆。
//dijkstra最短路径练习 #include<stdio.h> #include<iostream> using namespace std; #define maxdist 1005 #define maxn 102 int n,e; int adj[maxn][maxn]; int dist[maxn]; int sure[maxn];//标记是否确定最短距离 void dijkstra(int v0){ dist[v0]=0; sure[v0]=1; //初始化dist数组 for(int i=1;i<=n;i++){ if(i!=v0){ dist[i]=adj[v0][i]; } } for(int j=2;j<=n;j++){ //找最小的 int dmin=maxdist; int subscript; for(int i=1;i<=n;i++){ if(sure[i]==0&&dist[i]<dmin){ dmin=dist[i]; subscript=i; } } //最小的标记 sure[subscript]=1; //更新 for(int i=1;i<=n;i++){ if(sure[i]==0&&dist[subscript]+adj[subscript][i]<dist[i]){ dist[i]=dist[subscript]+adj[subscript][i]; } } } } int main(){ cin>>n>>e; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ adj[i][j]=maxdist; } } for(int i=0;i<e;i++){ int x,y,w; cin>>x>>y>>w; adj[x][y]=adj[y][x]=w; } dijkstra(1); cout<<dist[n]<<endl; }