题解 | #最短路径问题#

最短路径问题

https://www.nowcoder.com/practice/e372b623d0874ce2915c663d881a3ff2

#include <iostream>
#include <utility>
#include <cstring>
using namespace std;
#define mm memset
typedef pair<int ,int> pii;
pii m1[1000][1000];
bool visited[1000];

int numsd[1000]; // initial =inf

int numspre[1000]; // previous path
int numsc[1000]; // 
const int INF = 0x3f3f3f3f;

void dijkstra(int s , int e1)
{

    mm(numsd,0x3f,sizeof(numsd));
    mm(numsc,0x3f,sizeof(numsc));
    mm(visited,0,sizeof(visited));
    numsd[s] = 0; numspre[s] = s; numsc[s] = 0;
    while (visited[e1] == false)
    {
        int tmpd = INF, tmpi;
        for(int i= 0; i< 1000 ;++i)
        {
            if(visited[i] == false && numsd[i] < tmpd)
            {
                tmpd = numsd[i]; tmpi =i;
            }
        }
        visited[tmpi] = true; 
        // if(tmpi == e1) return;
        for(int i = 0; i< 1000 ; ++i)
        {
            if(visited[i]==false && 
           ( 
            (numsd[i] > numsd[tmpi] +m1[tmpi][i].first) 
            || 
            (numsd[i] == numsd[tmpi] +m1[tmpi][i].first && numsc[i] > numsc[tmpi] +m1[tmpi][i].second)
           )
           )
            {
                numsd[i] = numsd[tmpi] +m1[tmpi][i].first;
                // numspre[i] = tmpi;
                numsc[i] = numsc[tmpi] +m1[tmpi][i].second;
            }
        }
    }
}

// int fcount(int s,int e1)
// {
//     if(s == e1) return 0;
//     return m1[e1][numspre[e1]].second + fcount(s,numspre[e1]);
// }

int main()
{
    int  n ,m; 
    while (cin>> n >>m)
    {
        if( n== 0) break;
        int a ,b ,d ,p,s, e1;
    
        mm(m1,0x3f,sizeof(m1));
        for(int i= 0 ;i< m ;++ i)
        {
            cin >>a >>b>>d >>p;
            if(d < m1[a-1][b-1].first || (d ==m1[a-1][b-1].first && m1[a-1][b-1].second > p))
            {
                m1[a-1][b-1] = m1[b-1][a-1] ={d,p};
            }
        }
        cin>> s >>e1;
        dijkstra(s-1,e1-1);
        cout<< numsd[e1-1]<<" "<<numsc[e1-1]<<endl;
    }
    
}

全部评论

相关推荐

这不纯纯作弊了吗😢😢😢
编程界菜鸡:信这个的这辈子有了,这智商你靠啥都没用
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务