不僅適用於方陣的回形矩陣
阿新 • • 發佈:2021-01-24
技術標籤:# ACM基礎
文章目錄
分析
基本情況
這就是全部的基本情況,之後所有都是在此基礎上的變形。
遍歷方式
對應:for (int i = p; i <= n - 1 - p; i++)
中是<=
(A)還是<
(B)
我們採用A方式,而不採用B方式。因為B方式無法處理只有一個時的情況。
跳出條件
- 設立了兩個跳出判斷。
while
的跳出是①、④、⑤、⑥if
的跳出是②、③
答案
vector<vector<int>> matrix(6, vector<int>(4, 0));
int m = matrix. size(); // 行
int n = matrix[0].size(); // 列
int count = 0, max_count = m * n;
int p = 0;
while (count < max_count)
{
for (int i = p; i <= n - 1 - p; i++) // 上
{
matrix[p][i] = ++count;
}
for (int i = p + 1; i <= m - 1 - p; i++) // 右
{
matrix[i][n - 1 - p] = ++count;
}
if (count >= max_count)
{
break;
}
for (int i = n - 2 - p; i >= p; i--) // 下
{
matrix[m - 1 - p][i] = ++count;
}
for (int i = m - 2 - p; i > p; i--) // 左
{
matrix[i][p] = ++count;
}
p++;
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
printf("%2d ", matrix[i][j]);
printf("\n");
}