一个教室中有M行N列,教室中老是有D对学生爱凑在一路讲话,教员要用走廊将他们离隔,但在行之间只能插手W条走廊,在列中只能插手E条走廊,要求计较出走廊加在哪里结果最好。
一对爱讲话的学生只能是摆布相邻或上下相邻,且输入的数据包管最优方案即独一性。
如何用C++解决这一问题呢?小编与大师分享编程经验。
输入数据时,第1行数据为5个空格离隔的整数,代表M、N、W、E、D,此中M<=1000、N>=2,W的值要小于M,E的值要小于N,D的值小于2000。接下来D行数据,每行是4个整数,用空格离隔,别离暗示一对爱讲话学生的坐标,即(ax,ay)和(bx,by)。
输出数据共两行,第1行为W个整数,暗示插手行的走廊,例如2暗示走廊加在第2行与第3行之间,第2行为E个整数,暗示插手列的走廊,例如4暗示走廊加在第4列与第5列之间。
如有多组谜底,则输出字典序最小的一组。
界说一个整型常量,节制数组的大小。
界说一个函数,实现数组的排序。
用两重for轮回,确定命组元素在从年夜到小有序数列中的位置。
插入元素之前,将其他元素从插入点往后移一位,空出插入位置。
将排好序的元素,插入有序数列中。
本家儿函数中,界说5个整型变量,保留M、N、W、E、D的数值。
界说4个整型变量,保留输入的每对爱凑在一路讲话的学生位置。
界说4个整型数组变量,按照每行、每列中凑在一路学生的对数,保留排序后的挨次,以及排序后元素对应的行数和列数。
给数组sr和sl设置初始值,初始数值为0。
输入5个整数,别离代表M、N、W、E、D。
按照数值d,输入每对爱讲话的学生坐标。
若是两个学生的Y坐标一致,可以确定学生地点行有一个要分隔的学生对,用数组sr统计。
若是两个学生的X坐标一致,则可以确定学生地点列有一个要分隔的学生对,用数组sl统计。
按照每行系列中可分隔学生对的数量,对数组sr和sl排序,将排序后的行数和列数保留在数组row和list中。
然后,按照行之间所能插手的最多走廊数W,输出响应的行数。
最后,按照列之间所能插手的最多走廊数E,输出响应的列数。
运行法式,输入M、N、W、E、D的值,输入D对学生的位置后,电脑就管帐算出插手走廊的最佳方式。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!