1 条题解
-
0
解题思路
- 输入处理:
- 使用
while
循环读取输入的矩阵大小n
,当n
为 0 时结束循环。 - 初始化字符矩阵
grid
为全 0。 - 读取
n
组数据,每组数据包含一个字符c
和两个坐标x
、y
,将字符存储到矩阵grid
的对应位置。
- 使用
- 寻找矩形:
- 遍历矩阵的每一行
line
(从 0 到 50)。 - 对于当前行,遍历该行的每个位置
i
。如果grid[line][i]
不为 0,再遍历该行i
之后的位置j
。 - 对于每一对
i
和j
,遍历line
之后的行nextline
(从line + 1
到 50)。如果grid[nextline][i]
和grid[nextline][j]
都不为 0,则表示找到了一个矩形。 - 将矩形的四个字符组合成一个字符串
t
,并插入到集合res
中。
- 遍历矩阵的每一行
- 输出结果:
- 输出当前点集的编号和冒号。
- 如果集合
res
的大小大于 0,遍历集合res
,输出每个矩形的字符组合。每输出 10 个组合后换行。 - 如果集合
res
的大小为 0,输出 “ No rectangles”。
#include<iostream> #include<string> #include<cstring> #include<set> using namespace std; struct point{ int x,y; }pp; char grid[51][51]; int n; int main(){ int nc = 1; while(cin>>n&&n){ set<string> res; memset(grid,0,sizeof(grid)); char c; int x,y; for(int i = 0; i < n; i++){ cin >> c >> x >> y; grid[x][y] = c; } for(int line = 0; line <= 50; line++){ for(int i = 0; i <= 50; i++) if(grid[line][i]>0){ for(int j = i+1; j <= 50; j++) if(grid[line][j]){ for(int nextline = line+1; nextline<=50; nextline++) if(grid[nextline][i]&&grid[nextline][j]){ string t; t.push_back(grid[line][j]); t.push_back(grid[nextline][j]); t.push_back(grid[nextline][i]); t.push_back(grid[line][i]); res.insert(t); } } } } cout << "Point set " << nc++ <<":"; if(res.size()>0){ cout << endl; int num = res.size(), i = 1; for(set<string>::iterator it = res.begin(); it!=res.end(); i++,it++){ cout << " " << *it; if(i%10==0) cout <<endl; } if(i%10!=1) cout << endl; } else cout << " No rectangles" << endl; } }
- 输入处理:
- 1
信息
- ID
- 315
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者