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;
}



好久没更新了 ····

考研嘛···

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

版权声明:

相关文章推荐

L2-001. 紧急救援-PAT团体程序设计天梯赛GPLT(Dijkstra算法)

L2-001. 紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在...

PAT 团体天梯赛 L2-001 紧急救援 (迪杰斯特拉)

题意: 中文的就不说了 方法:方法一看就知道 单源最短路径并且维护另外的两个救援人数和方法数就好了 因为习惯了用spfa写 怎么调试都是部分正确 7分的那组测试数据就是过不了 硬是想不到为什么 后...

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

PAT L2-001 紧急救援

团体程序设计天梯赛-练习集 L2-001 紧急救援 dijkstra 解题报告

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

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

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

L2-001. 紧急救援 - Dijkastra+变形 -天梯赛练习

L2-001. 紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在...

L2-001. 紧急救援-Java-pat-dfs

L2-001. 紧急救援 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度...

PAT-L2-001. 紧急救援(最短路 dijkstar)

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

PAT L2-001. 紧急救援

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

PAT L2-001紧急救援(java)

import java.util.Scanner; /** * dijkstra 经典应用变式 * L2-001. 紧急救援 * @author panda * */ public clas...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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