公共汽车,写一个程序,告诉司机怎么走能接到最多的乘客。

这篇博客探讨了一个城市网格状道路中,公交车如何从(1,1)出发到达(n,m)能接最多乘客的问题。题目描述了数据范围限制,并提出了编程挑战,要求写出能确定最优行驶路线的程序。每个路口的乘客数量被限制在1000000以内。" 104861134,7925799,修复Chromebook HP C732-CWU连接MT7628 Wi-Fi错误,"['无线网卡', 'Wi-Fi连接', '驱动修复', '嵌入式系统']
摘要由CSDN通过智能技术生成

【问题描述】

一个城市的道路成了像棋盘那样的网状,南北向的路有n条,并由西向东从1标记到n,东西向的路有m条,并从南向北从1标记到m,每一个交叉点代表一个路口,有的路口有正在等车的乘客。一辆公共汽车将从(1,1)点驶到(n,m)点,车只能向东或者向北开.

写一个程序,告诉司机怎么走能接到最多的乘客。

 

 


【数据范围限制】

100%的数据:1 <= n <= 103, 1 <= m <= 103, 1 <= k <= 103;

每个路口的乘客数量不超过1000000。

代码:

#region 公共汽车接最多人
        public void GetBusMax()
        {

            int[,] road = null;
            int[,] MAX = null;
            int rows = 0;
            int conlums = 0;
            StreamReader sr = File.OpenText("bus.in");
            StreamWriter sw = File
在C语言中,可以使用信号量来实现公共汽车司机、售票员和乘客之间的进程同步。具体实现步骤如下: 1. 定义信号量:定义三个信号量,分别代表司机、售票员和乘客。 ```c sem_t driver_sem; sem_t conductor_sem; sem_t passenger_sem; ``` 2. 初始化信号量:在程序开始时,使用sem_init()函数初始化信号量。 ```c sem_init(&driver_sem, 0, 1); // 初始值为1,表示司机可以进入公共汽车 sem_init(&conductor_sem, 0, 1); // 初始值为1,表示售票员可以进入公共汽车 sem_init(&passenger_sem, 0, 0); // 初始值为0,表示乘客不能进入公共汽车 ``` 3. 司机进入公共汽车司机在进入公共汽车之前需要等待售票员离开公共汽车。 ```c sem_wait(&conductor_sem); // 等待售票员离开公共汽车 // 进入公共汽车 // ... sem_post(&driver_sem); // 司机离开公共汽车,释放信号量 ``` 4. 售票员进入公共汽车:售票员在进入公共汽车之前需要等待司机离开公共汽车,同时需要等待所有乘客下车。 ```c sem_wait(&driver_sem); // 等待司机离开公共汽车 // 等待所有乘客下车 while (sem_trywait(&passenger_sem) == 0) { // 乘客下车 } // 进入公共汽车 // ... sem_post(&conductor_sem); // 售票员离开公共汽车,释放信号量 ``` 5. 乘客上车:乘客在上车之前需要等待售票员允许进入公共汽车。 ```c sem_post(&passenger_sem); // 允许乘客进入公共汽车 sem_wait(&passenger_sem); // 等待售票员允许进入公共汽车 // 上车 // ... sem_post(&passenger_sem); // 乘客下车,释放信号量 ``` 通过信号量的方法,可以实现公共汽车司机、售票员和乘客之间的进程同步,保证每个人的行动顺序是正确的,从而避免了资源竞争和死锁等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值