C++中可提供停车的列车最大数量


在这个问题中,我们得到一个数字N,表示一个车站拥有的站台数量(每个站台有两条轨道)。将有T列火车经过该车站,它们的到达和离开时间已知。每列火车停靠在一个特定的车站。我们的任务是创建一个程序,用C++查找可以提供停车的最大列车数量。

让我们举个例子来理解这个问题:

输入

N = 3, T = 5
Trains = {{0915, 0930, 2}, {0930, 0945, 1}, {0930, 1200, 1}, {0910, 0925, 3}, {0940, 1015, 1}}

输出

4

解释

The train schedules are,
Train 1: Train will be stopped at platform 2 - 09:15-09:30
Train 2: Train will be stopped at platform 1 - 09:30-09:45
Train 3: Train will be not be stopped
Train 4: Train will be stopped at platform 3 - 09:10-09:25
Train 5: Train will be stopped at platform 1 - 09:40-10:15

解决方案方法

这个问题的解决方案需要应用贪婪算法,因为我们需要找到可以在车站停靠的最大火车数量。

我们将使用活动选择方法来找到问题的最佳解决方案。因此,对于每个站台,我们将创建一个向量来存储火车的相关信息。然后找到最佳解决方案。

示例

演示我们问题的程序:

 在线演示

#include <bits/stdc++.h>
using namespace std;
int maxStop(int trains[][3], int N, int T) {
   vector<pair<int, int> > tStopping[N + 1];
   int trainsStopped = 0;
   for (int i = 0; i < T; i++)
      tStopping[trains[i][2]].push_back( make_pair(trains[i][1], trains[i][0]));
      for (int i = 0; i <= N; i++)
         sort(tStopping[i].begin(), tStopping[i].end());
            for (int i = 0; i <= N; i++) {
               if (tStopping[i].size() == 0)
                  continue;
                  int a = 0;
                  trainsStopped++;
                  for (int j = 1; j < tStopping[i].size(); j++) {
                     if (tStopping[i][j].second >= tStopping[i][a].first) {
                        a = j;
                        trainsStopped++;
                     }
                  }
            }
            return trainsStopped;
}
int main(){
   int N = 3;
   int T = 5;
   int trains[T][3] = {{915, 930, 2}, {930, 945, 3}, {930, 1200, 1}, {910, 925, 3}, {940, 1015, 1}};
   cout<<"The Maximum No. of Trains Stopped at the station is "<<maxStop(trains, N, T);
   return 0;
}

输出

The Maximum No. of Trains Stopped at the station is 4

更新于:2020年10月15日

227 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告