【第22期】观点:IT 行业加班,到底有没有价值?

PAT天梯赛-L2-001 紧急救援

原创 2016年05月30日 19:16:10
<pre name="code" class="cpp">#include<iostream>
#include<fstream>
#include<cstring>
#include<vector>
#include<string>
#include<cstdio>

using namespace std;
const int Size=500;
const int INF=0x3f3f3f3f;
//input list
int N,M,S,D;
//temporary variables
int i,j,t;
//auxiliary vector
vector<int>RescueTeamNum;// 没觉得vector比数组好用 因题而异吧
int Matrix[Size][Size];
int Visited[Size];
int Dis[Size];
int Path[Size];
int LargestTeamNum[Size];
int PathNum[Size];

void ShortestPath_DIJ(int v0)
{
    // ********************initialize code********************
    memset(Visited,0,sizeof(Visited));
    LargestTeamNum[v0]=RescueTeamNum[v0];
    for(i=0; i<N; i++)
    {
        Dis[i]=Matrix[v0][i];
        Path[i]=-1;

        if(Dis[i]<INF){
            PathNum[i]=1;
            Path[i]=v0;
            if(i!=v0)
            LargestTeamNum[i]=RescueTeamNum[i]+RescueTeamNum[v0];
            //cout<<i<<" "<<LargestTeamNum[i]<<endl;
        }
    }
//    for(i=0; i<N; i++)
//            cout<<LargestTeamNum[i]<<endl;
//        cout<<endl;
    Path[S]=-1;
    Visited[v0]=1;
    int Min;
    int TheNearest;
    // ********************main circle********************
    for(j=1; j<N; j++){// 其余N-1个点
        Min=INF;
        for(i=0; i<N; i++)//查找 距离v0最近的点
            if(!Visited[i]&&Dis[i]<Min)
            {
                Min=Dis[i];
                TheNearest=i;
            }
        Visited[TheNearest]=1; // 将最近的点加入到最短路径的集合中去
        //LargestTeamNum[TheNearest]+=LargestTeamNum[Path[TheNearest]];
        for(i=0; i<N; i++)// 更新未加入的最短路径的集合中的其他点到v0的距离
            if(!Visited[i]&&Min+Matrix[TheNearest][i]<Dis[i])
            {
                Dis[i]=Min+Matrix[TheNearest][i];
                Path[i]=TheNearest;
                LargestTeamNum[i]=LargestTeamNum[TheNearest]+RescueTeamNum[i];
                PathNum[i]=PathNum[TheNearest];
            }
            else if(!Visited[i]&&Min+Matrix[TheNearest][i]==Dis[i])
            {
                PathNum[i]+=PathNum[TheNearest];
                if(LargestTeamNum[i] < LargestTeamNum[TheNearest]+RescueTeamNum[i])
                {
                    LargestTeamNum[i]=LargestTeamNum[TheNearest]+RescueTeamNum[i];
                    Path[i]=TheNearest;
                }
            }
    }//for
}

void PrintPath(int D)// good recursive
{
    if(Path[D]!=-1){
        PrintPath(Path[D]);
        cout<<Path[D]<<" ";
    }
}

int main()
{
    ifstream cin("in.txt");
    while(cin>>N>>M>>S>>D)
    {
        RescueTeamNum.clear();
        for(i=0; i<N; i++)
        {
            cin>>j;
            RescueTeamNum.push_back(j);
        }
        memset(Matrix,INF,sizeof(Matrix));
        int C1,C2,Len;
        for(i=0; i<M; i++)
        {
            cin>>C1>>C2>>Len;
            Matrix[C1][C2]=Matrix[C2][C1]=Len;
        }
        Matrix[S][S]=0;
        ShortestPath_DIJ(S);
//        for(i=0; i<N; i++)
//            cout<<Dis[i]<<" "<<Path[i]<<endl;
//        cout<<endl;


        cout<<PathNum[D]<<" "<<LargestTeamNum[D]<<endl;
        PrintPath(D);
        cout<<D<<endl;
    }//while
    return 0;
}



好久没更新了 ····

考研嘛···

就当练习数据结构了···

版权声明: 举报

相关文章推荐

PAT天梯赛L2-001. 紧急救援 dijk经典最短路劲+点权最大+记录路径

L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作...

MQJE001: Completion Code '2', Reason '2195'

在使用mq v7版本,java编写的mq应用程序,在发送消息时,会发生异常:MQJE001: Completion Code '2', Reason '2195'; 虽然有异常,但是程序还是会正常执行。 解决办法: 添加jar包:com.ibm.mq.pcf.j...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

团体程序设计天梯赛-练习集L2-001. 紧急救援(dijkstra)

L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越...

解决db2无法还原.001文件

F:\WBMDCS.0\DB2\NODE0000\CATN0000&gt;db2 restore db wbmdcs from F:\WBMDCS.0\DB2\NODE0000\CATN0000\20120517 taken at 20120517155143 into wbmdcsSQL2...

PAT 团体程序设计天梯赛-练习集 L2-001. 紧急救援 【dijkstra】

题目链接http://blog.csdn.net/tc_to_top/article/details/51427223思路题意是求个最短路,要求路径长度和最短的前提下,点权和最大,并求出长度相等的最短...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)