最短路

来源:互联网 发布:游戏优化差会怎样 编辑:程序博客网 时间:2024/04/30 23:28

点击打开链接

一。题目:

最短路 Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 19   Accepted Submission(s) : 10Problem 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<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。输入保证至少存在1条商店到赛场的路线。 Output 对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间 Sample Input2 11 2 33 31 2 52 3 53 1 20 0 Sample Output32 Source UESTC 6th Programming Contest Online

2.代码:

#include<stdio.h>#include<string.h>#define max 0x7fffffffint map[110][110];int dist[110];int visit[110];int prev[110];void dijkstra(int n,int v){    memset(dist,-1,sizeof(dist));//注意初始化    for(int i=1; i<=n; i++)    {        dist[i]=map[v][i];        visit[i]=0;        if(dist[i]!=max)            prev[i]=v;        else            prev[i]=0;//并不是所有的prev都是v    }    dist[v]=0;    visit[v]=1;    for(int j=1; j<=n; j++)//注意    {        int min=max;        int u;        for(int i=1; i<=n; i++)        {            if(dist[i]<min&&visit[i]==0)            {                min=dist[i];                u=i;            }        }        visit[u]=1;        int newdist;        for(int i=1; i<=n; i++)        {            if(map[u][i]!=max&&visit[i]==0)            {                newdist=dist[u]+map[u][i];                if(newdist<dist[i])                {                    dist[i]=newdist;                    prev[i]=u;                }            }        }    }}int main(){    int n,m;    int a,b,s;    while(scanf("%d%d",&n,&m)!=EOF)    {        if(n==0&&m==0)            break;        for(int i=1; i<=n; i++)        {            for(int j=1; j<=n; j++)                map[i][j]=map[j][i]=max;        }        for(int i=0; i<m; i++)        {            scanf("%d%d%d",&a,&b,&s);            map[a][b]=s;            map[b][a]=s;        }        dijkstra(n,1);        printf("%d\n",dist[n]);    }}/*2 11 2 33 31 2 52 3 53 1 20 0*/



 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高三学生失眠怎么办 期末考试考差了怎么办 小孩考试太粗心怎么办 带孩子太粗心怎么办 小孩做数学粗心怎么办 小学一年级学生厌学怎么办 小学二年级厌学怎么办 做题做的烦躁了怎么办 英语不会做题怎么办 孩子审题不细心怎么办 生孩子有恐惧症怎么办 小孩不喜欢上幼儿园怎么办 小孩不喜欢去幼儿园怎么办 小孩不喜欢学生字怎么办 学生不喜欢补课老师怎么办 小孩不喜欢上学逃课怎么办 一年级小朋友不爱写字怎么办 幼儿园小朋友不爱写字怎么办 孩子懒散不积极怎么办 孩子不肯上幼儿园怎么办 孩子不肯去幼儿园怎么办 小孩记不住字怎么办 小孩不会写字要怎么办 一年级孩子不爱写字怎么办 一年级小孩不爱写字怎么办 孩子不爱写字怎么办呢 幼儿园孩子不爱写字怎么办 孩子上学没学籍怎么办 孩子上学务工证怎么办 孩子上学被欺负怎么办 孩子害怕上幼儿园怎么办 孩子写字肩膀疼怎么办 5岁不会写字怎么办 上中班不爱写字怎么办 孩子性子太慢怎么办 13小孩特别懒怎么办 小孩不肯上幼儿园怎么办 宝宝不肯上幼儿园怎么办 宝宝不肯去幼儿园怎么办 小孩子不肯去幼儿园怎么办 上幼儿园不说话怎么办