普通dijkstra(邻接矩阵)

来源:互联网 发布:u3d 粒子特效优化 编辑:程序博客网 时间:2024/05/16 07:47
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<iostream>#define inf  999999999#define maxn 20005using namespace std;int g[maxn][maxn];int dist[maxn];int vis[maxn];int n,m;void dijkstra(int st){int i,j,mindis,u;memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){dist[i]=g[st][i];}vis[st]=1;for(i=1;i<=n;i++){mindis=inf;u=-1;for(j=1;j<=n;j++){if(!vis[j]&&mindis>dist[j]){mindis=dist[j];u=j;}}if(u==-1)break;vis[u]=1;for(j=1;j<=n;j++){if(!vis[j]&&dist[j]>dist[u]+g[u][j]){dist[j]=dist[u]+g[u][j];}}}}int main(){int i,j,t;while(scanf("%d%d",&n,&m)!=EOF){for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j)g[i][j]=0;else g[i][j]=inf;}dist[i]=inf;}for(i=0;i<m;i++){int a,b,x;scanf("%d%d%d",&a,&b,&x);a++;b++;if(g[a][b]>x)g[a][b]=g[b][a]=x;}int u,v;scanf("%d%d",&u,&v);u++;v++;dijkstra(u);if(dist[v]==inf)printf("-1\n");else printf("%d\n",dist[v]);}return 0;}/*3 30 1 10 2 31 2 10 23 10 1 11 2*//*2-1*/

阅读全文
0 0
原创粉丝点击