CSP-202312-1-仓库规划
解题思路
-
定义结构体和变量:
- 结构体
MyWareHouse
,用来存储每个仓库的索引(编号)和位置编码。 - 定义了整数
n
和m
,分别代表仓库的数量和位置编码的维数。 - 定义了一个
vector<MyWareHouse>
的列表wareHouseList
,用来存储所有仓库的信息。
- 结构体
-
输入数据:
- 首先,程序从标准输入读取
n
(仓库个数)和m
(位置编码的维数)。 - 然后,程序进入一个循环,读取每个仓库的位置编码,并将仓库信息存储到
wareHouseList
中。每个仓库的索引设置为其在输入序列中的位置加一(因为仓库编号从1开始)。
- 首先,程序从标准输入读取
-
寻找上级仓库:
- 对于
wareHouseList
中的每一个仓库,程序尝试找到它的上级仓库。 - 程序通过两层循环来完成这个任务:外层循环遍历所有仓库(假设当前仓库为
i
),内层循环也遍历所有仓库(假设当前仓库为j
),以找到i
的上级仓库。 - 在内层循环中,程序比较仓库
i
和仓库j
的位置编码的每一维。如果i
的每一维都小于j
的相应维度,则变量find
会增加。如果find
的值等于位置编码的维数m
,说明仓库j
的每一维都大于仓库i
的对应维度,即仓库j
可以成为仓库i
的上级。 - 如果找到了上级仓库,则将该上级仓库的索引赋值给变量
index
并退出内层循环;如果没有找到,则index
保持为0。
- 对于
完整代码
#include<iostream>
#include<vector>
using namespace std;
struct MyWareHouse
{
int index;
vector<int>position;
};
int n, m;
vector<MyWareHouse>wareHouseList;
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++)
{
MyWareHouse t;
t.index = i + 1;
for (int j = 0; j < m; j++)
{
int pos;
cin >> pos;
t.position.push_back(pos);
}
wareHouseList.push_back(t);
}
for (int i = 0; i < n; i++)
{
int index = 0; // 默认没有找到,索引为0
for (int j = 0; j < n; j++)
{
int find = 0; // 每有一维大于 find++,直到 find 为 m
// 比较位置坐标
for (int k = 0; k < m; k++)
{
if (wareHouseList[i].position[k] < wareHouseList[j].position[k]) {
find++;
}
}
if (find == m)
{
index = wareHouseList[j].index;
break;
}
}
cout << index << endl;
}
return 0;
}