| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 91863 | sh25_shenpy | 回形取数 | C++ | 通过 | 7 MS | 456 KB | 1549 | 2026-06-17 20:01:07 |
#include <iostream> #include <vector> using namespace std; int main() { // 优化IO ios::sync_with_stdio(false); cin.tie(NULL); int m, n; if (!(cin >> m >> n)) return 0; vector<vector<int>> matrix(m, vector<int>(n)); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { cin >> matrix[i][j]; } } // 定义方向:下(1,0), 右(0,1), 上(-1,0), 左(0,-1) // 题目要求:初始向下,遇阻左转90度 -> 下->右->上->左->下... int dx[] = {1, 0, -1, 0}; int dy[] = {0, 1, 0, -1}; int dir = 0; // 当前方向索引,0:下, 1:右, 2:上, 3:左 int x = 0, y = 0; // 当前位置 vector<vector<bool>> visited(m, vector<bool>(n, false)); bool first = true; for (int k = 0; k < m * n; ++k) { // 输出当前元素 if (!first) cout << " "; cout << matrix[x][y]; first = false; visited[x][y] = true; // 计算下一个位置 int nx = x + dx[dir]; int ny = y + dy[dir]; // 如果下一个位置越界或已访问,则左转(改变方向) if (nx < 0 || nx >= m || ny < 0 || ny >= n || visited[nx][ny]) { dir = (dir + 1) % 4; // 左转90度:下->右->上->左 nx = x + dx[dir]; ny = y + dy[dir]; } // 更新位置 x = nx; y = ny; } cout << endl; return 0; }