码迷,mamicode.com
首页 > 其他好文 > 详细

深夜补最短路!

时间:2019-09-03 09:18:21      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:tin   void   continue   set   init   print   java   The   while   

嘻嘻!

https://cn.vjudge.net/contest/323530#problem/A

show the code:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1005
using namespace std;
const int inf=0x3f3f3f3f;
int dis[maxn],vis[maxn];
int mp[maxn][maxn];
int n;
void init()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            if(i==j)
                mp[i][j]=0;
            else
                mp[i][j]=inf;
        }
}
int djs(int st,int ed)
{
    for(int i=1;i<=n;i++)
    {
        dis[i]=mp[st][i];
        vis[i]=0;
    }
    vis[st]=1;
    for(int i=1;i<n;i++)
    {
        int minn=inf;
        int next=-1;
        for(int j=1;j<=n;j++)
        {
            if(vis[j]==0&&dis[j]<minn)
            {
                minn=dis[j];
                next=j;
            }
        }
        if(next==-1)  continue;
        vis[next]=1;
        for(int j=1;j<=n;j++)
        {
            if(vis[j]==0)
                dis[j]=min(dis[j],dis[next]+mp[next][j]);
        }
    }
    return dis[ed];
}
int main()
{
	//无向图中边的个数为t,点的个数为n。 
    int t,a,b,x;
    while(~scanf("%d%d",&t,&n))
    {
        memset(mp,inf,sizeof(mp));
        while(t--)
        {
            scanf("%d%d%d",&a,&b,&x);//起点a,终点b,权值x。 
            mp[a][b]=min(x,mp[a][b]);//可以当板子丫! 
            mp[b][a]=min(x,mp[b][a]);
        }
        printf("%d\n",djs(1,n));
    }
}

  

深夜补最短路!

标签:tin   void   continue   set   init   print   java   The   while   

原文地址:https://www.cnblogs.com/dragondragon/p/11450777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!