zoukankan      html  css  js  c++  java
  • 最短路

    最短路

    Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 91   Accepted Submission(s) : 59
    Problem Description
    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

     

    Input
    输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B& lt;=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。输入保证至少存在1条商店到赛场的路线。
     

    Output
    对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
     

    Sample Input
    2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
     

    Sample Output
    3 2
     

    Source
    UESTC 6th Programming Contest Online
     

     
     
     
     
    #include<stdio.h>
    #include<string.h>
    #define INF 0xfffffff
    int map[200][200];
    int main()
    {
        int m,n,i,j,k;
        while(scanf("%d%d",&m,&n),m|n)
        {
            int a,b,c;
            for(i=1;i<=m;i++)
            {
                for(j=1;j<=m;j++)
                map[i][j]=map[j][i]=INF;
            }
            for(i=0;i<n;i++)
            {
                scanf("%d%d%d",&a,&b,&c);
                if(c<map[a][b])
                map[a][b]=map[b][a]=c;
            }
            for(k=1;k<=m;k++)
            for(i=1;i<=m;i++)
            for(j=1;j<=m;j++)
            {
                if(i==j)
                continue;
                if(map[i][j]>map[i][k]+map[k][j])
                map[i][j]=map[i][k]+map[k][j];
            }
            printf("%d
    ",map[1][m]);
        }
        return 0;
    }


    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<algorithm>
    using namespace std;
    #define INF 0x3f3f3f
    int vis[10100],dis[10100],m,n,cnt;
    int head[10100];
    struct node 
    {
    	int u,v,val;
    	int next;
    }edge[10100];
    void add(int u,int v,int val)
    {
    	edge[cnt].u=u;
    	edge[cnt].v=v;
    	edge[cnt].val=val;
    	edge[cnt].next=head[u];
    	head[u]=cnt++;
    }
    void spfa(int st)
    {
    	queue<int>q;
    	q.push(st);
    	memset(dis,INF,sizeof(dis));
    	memset(vis,0,sizeof(vis));
    	vis[st]=1;
    	dis[st]=0;
    	while(!q.empty())
    	{
    		int u=q.front();
    		q.pop();
    		vis[u]=0;
    		for(int i=head[u];i!=-1;i=edge[i].next)
    		{
    			int v=edge[i].v;
    			if(dis[v]>dis[u]+edge[i].val)
    			{
    				dis[v]=dis[u]+edge[i].val;
    				if(!vis[v])
    				{
    					vis[v]=1;
    					q.push(v);
    				}
    			}
    		}
    	}
    	printf("%d
    ",dis[m]);
    }
    int main()
    {
    	while(scanf("%d%d",&m,&n),m||n)
    	{
    		int a,b,c;
    		memset(head,-1,sizeof(head));
    		cnt=0;
    		while(n--)
    		{
    			scanf("%d%d%d",&a,&b,&c);
    			add(a,b,c);
    			add(b,a,c);
    		}
    		spfa(1);
    	}
    	return 0;
    }


  • 相关阅读:
    sqlserver调优-索引
    浮点数的这些坑,你未必知道-深入理解浮点数的规律
    生产环境部署springcloud微服务启动慢的问题排查
    redis传输协议规范-下(Redis Protocol specification)
    一步步完成“迷你版” 的ASP.NET Core框架
    安全漏洞整改系列(一)
    docker实战(二)之redis的使用
    docker实战(一)之Tomcat的安装
    docker安装步骤
    WPF后台操作前台元素之查找对象
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273823.html
Copyright © 2011-2022 走看看