最短路的Floyd-Dijkstra-Spfa板子
阿新 • • 發佈:2018-12-08
int maps[105][105]; int n,m; //初始化 void init() { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(i==j) maps[i][j]=0; else maps[i][j]=INF; } } } void floyd() { for(int k=1;k<=n;++k) { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]); } } } int spfa(int st,int ed) { for(int i=1;i<=n;++i) { dis[i]=INF; vis[i]=0; } dis[st]=0; queue<int>q; q.push(st); vis[st]++; while(!q.empty()) { int now=q.front(); q.pop(); vis[now]--; for(int i=1;i<=n;++i) { if(dis[i]>dis[now]+maps[now][i]) { dis[i]=dis[now]+maps[now][i]; if(!vis[i]) { q.push(i); vis[i]++; } } } } return dis[ed]; } int maps[1005][1005]; int n,m; int dis[1005]; int vis[1005]; void init() { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(i==j) maps[i][j]=0; else maps[i][j]=INF; } } } int dijkstra(int st,int ed) { for(int i=1;i<=n;++i) { dis[i]=maps[st][i]; vis[i]=0; } vis[st]++; while(1) { int next=-1; for(int i=1;i<=n;++i) { if(!vis[i]&&(next==-1||dis[next]>dis[i])) next=i; } if(next==-1) break; vis[next]++; for(int i=1;i<=n;++i) dis[i]=min(dis[i],dis[next]+maps[next][i]); } return dis[ed]; }
int maps[105][105]; int n,m; //初始化 void init() { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(i==j) maps[i][j]=0; else maps[i][j]=INF; } } } void floyd() { for(int k=1;k<=n;++k) { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]); } } } int spfa(int st,int ed) { for(int i=1;i<=n;++i) { dis[i]=INF; vis[i]=0; } dis[st]=0; queue<int>q; q.push(st); vis[st]++; while(!q.empty()) { int now=q.front(); q.pop(); vis[now]--; for(int i=1;i<=n;++i) { if(dis[i]>dis[now]+maps[now][i]) { dis[i]=dis[now]+maps[now][i]; if(!vis[i]) { q.push(i); vis[i]++; } } } } return dis[ed]; } int maps[1005][1005]; int n,m; int dis[1005]; int vis[1005]; void init() { for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(i==j) maps[i][j]=0; else maps[i][j]=INF; } } } int dijkstra(int st,int ed) { for(int i=1;i<=n;++i) { dis[i]=maps[st][i]; vis[i]=0; } vis[st]++; while(1) { int next=-1; for(int i=1;i<=n;++i) { if(!vis[i]&&(next==-1||dis[next]>dis[i])) next=i; } if(next==-1) break; vis[next]++; for(int i=1;i<=n;++i) dis[i]=min(dis[i],dis[next]+maps[next][i]); } return dis[ed]; }