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. 紧急救援 (最短路变形 Dijkstra + 记录路径)

PAT L2-001. 紧急救援 (最短路变形 Dijkstra + 记录路径)
  • Tc_To_Top
  • Tc_To_Top
  • 2016年05月16日 18:51
  • 3315

PAT L2-001紧急救援(java)

import java.util.Scanner; /** * dijkstra 经典应用变式 * L2-001. 紧急救援 * @author panda * */ public clas...
  • wo1shi1xiong125
  • wo1shi1xiong125
  • 2016年06月03日 23:14
  • 578

L2-001. 紧急救援

题目链接在下方: https://www.patest.cn/contests/gplt/L2-001 这道题就是一道最短路(dijkstra算法),将模板稍作修改就行了,就是再另外加...
  • qsort_
  • qsort_
  • 2016年07月07日 17:29
  • 1251

PAT L2-1. 紧急救援 (Dijkstra扩展)

题目链接:https://www.patest.cn/contests/gplt/L2-1 L2-1. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码...
  • Strokess
  • Strokess
  • 2016年05月07日 20:54
  • 2171

L2-001. 紧急救援

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

L2-001. 紧急救援-Dijkstra算法的综合运用

#include "iostream" using namespace std; #define Max 500 #define Sky 99999 int Graph[Max][Max],Top,...
  • dtwd886
  • dtwd886
  • 2016年05月25日 21:36
  • 1131

PAT L2-001. 紧急救援 (最短路变形 Dijkstra + 记录路径)

作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求...
  • the_love_story
  • the_love_story
  • 2017年03月23日 10:53
  • 272

天梯-L2-001. 紧急救援

最短路的路径记录
  • sinat_29278271
  • sinat_29278271
  • 2016年07月12日 13:32
  • 489

GPLT L2-001. 紧急救援【Dijkstra】

Dijkstra的应用,多个权值求解!
  • GuoZLH
  • GuoZLH
  • 2017年03月09日 01:23
  • 184

L2-001. 紧急救援(dijkstra+记录路径)

L2-001. 紧急救援作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地...
  • ydm1234
  • ydm1234
  • 2016年07月11日 00:32
  • 323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PAT天梯赛-L2-001 紧急救援
举报原因:
原因补充:

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