題解:蛇形矩陣
- 題目描述
- 思路分析
- 代碼實作
題目描述

題目鏈接
https://www.acwing.com/problem/content/758/
思路分析
-
首先會有的一種思路是四個邊界,然后for回圈判斷,但是這樣代碼量太大
-
可以定義偏移方向和偏移量

-
分析一下需要拐彎的情況

-
還不太懂得可以看后面的代碼,代碼中有詳細的注釋
代碼實作
#include <iostream>
using namespace std;
const int N = 110;
int n, m;
int q[N][N];//陣列模擬
int main()
{
cin >> n >> m;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
//定義方向的偏移量 (偏移量陣列常用)
int x = 0, y = 0, d = 1;
//定義當前坐標,從左上角開始走 d是方向 :1是向右,2是向下,3是向左,4是向上
for (int i = 1; i <= n * m; i ++ )//把所有數填進去
{
q[x][y] = i;//把i填在格子上
int a = x + dx[d], b = y + dy[d];//沿著當前方向走,下一個格子的坐標
if (a < 0 || a >= n || b < 0 || b >= m || q[a][b])//判斷是否撞墻:撞墻分兩種:1.出界2.走到重復格子
{
d = (d + 1) % 4;//如果撞墻,則順時針旋轉方向
a = x + dx[d], b = y + dy[d];//更新坐標
}
x = a, y = b;
}
for (int i = 0; i < n; i ++ )//重新輸出矩陣
{
for (int j = 0; j < m; j ++ )
cout << q[i][j] << ' ';
cout << endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247728.html
標籤:其他
上一篇:大一寒假訓練(七)
下一篇:C++炸彈小游戲
