最短路的Dijkstra朴素算法
HDU2544
#include <algorithm> #include <functional> #define MAX 200 #define INF 1<<30 using namespace std; int n,m,s,e; int path[MAX][MAX]; int dist[MAX]; bool vis[MAX]; int main() { while(scanf("%d%d",&n,&m)!=EOF && (n+m)) { memset(path,0,sizeof(path)); memset(vis,true,sizeof(vis)); for(int i=1;i<=n;i++) { dist[i]=INF; } for(int i=0;i<m;i++) { int a,b,x; scanf("%d%d%d",&a,&b,&x); path[a][b]=path[b][a]=x; } //scanf("%d%d",&s,&e); dist[1]=0; for(int i=0;i<=n;i++) { int x,m=INF; for(int j=0;j<=n;j++) { if(vis[j] && dist[j]<=m) { m=dist[j]; x=j; } } vis[x]=false; for(int j=0;j<=n;j++) { if(path[x][j]) { dist[j]<?=path[x][j]+dist[x]; } } } printf("%d\n",dist[n]); } return 0; }