亚历山大打仗啦啦啦!!!
Posted anhuixuyin218
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了亚历山大打仗啦啦啦!!!相关的知识,希望对你有一定的参考价值。
输入一个图,求出起点V0到达所有顶点的最短距离
#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<cstdlib> #include<algorithm> #include<string> #include<stack> #include<queue> #include<map> #define MAX 1010 const int INF=1000000000; using namespace std; int n,m,s; struct node{ int id; int layer; }; int G[MAX][MAX]; bool isVisit[MAX]={false}; int d[MAX]; void Dijkstra(int s){ fill(d,d+MAX,INF); d[0]=0; for(int i=0;i<n;i++){ int u=-1,MIN=INF; for(int j=0;j<n;j++){ if(isVisit[j]==false&&d[j]<MIN){ u=j; MIN=d[j]; } } if(u==-1) return; isVisit[u]=true; for(int v=0;v<n;v++){ if(isVisit[v]==false&&G[u][v]!=INF&&d[u]+G[u][v]<d[v]){ d[v]=d[u]+G[u][v]; } } } } int main(){ int u,v,w; //顶点个数,边数,起点编号 scanf("%d%d%d",&n,&m,&s); //初始化图 fill(G[0],G[0]+MAX*MAX,INF); for(int i=0;i<m;i++){ scanf("%d%d%d",&u,&v,&w); G[u][v]=w; } Dijkstra(s); for(int i=0;i<n;i++) printf("%d ",d[i]); return 0; }
以上是关于亚历山大打仗啦啦啦!!!的主要内容,如果未能解决你的问题,请参考以下文章