299 - Train Swapping - Uva online

本文介绍了一个关于火车车厢调度的小程序,该程序旨在寻找最优的车厢交换方案,以最少的步骤完成车厢排序。通过对每种情况进行编号记录,并计算所需的交换次数,最终输出最优化的交换次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   一个小程序,却不乏学习之处,通过这么一个小小的程序,让我注意到,所开数组的大小是有限制的,如果开得过大,不仅有编译出错的可能,还会造成内存的大量浪费,切记!

题目来源uva.onlinejudge.org/index.php

# include < iostream >  
#include < cstring >
using namespace std;
const int MAX = 3010;
const int MIN = 80;
int main() {
     int N, L, i, j, k, l, a;
     int Train[MAX][MIN];  //记录每种情况的编号
     int Swapnum[MAX];  //保存移动的次数
     memset(Swapnum, 0, MAX);
     cin >> N;
     for  (i = 0; i < N; i++) {
         cin >> L;
         for  (j = 0; j < L; j++)
             cin >> Train[i][j];
         for  (j = 0; j < L; j++) {
             k = j;
             for  (l = j + 1; l < L; l++)
                 if  (Train[i][k] > Train[i][l])
                     k = l;
             Swapnum[i] += k - j;  //此趟移动的次数
             if  (k != j) {
                 int t = Train[i][k];
                 for  (a = k; a > j; a--)  //将数据重新排序
                     Train[i][a] = Train[i][a - 1];
                 Train[i][j] = t;
             }
         }
     }
     for  (i = 0; i < N; i++)
         cout <<  "Optimal train swapping takes "  << Swapnum[i] <<  " swaps."  << endl;
     return  0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值