题目描述
蛇形矩阵数字填充
相关题
- [844.走迷宫]
- [1102.移动骑士]
- [1421.威斯康星方形牧场]
#include <iostream>
#include <algorithm>
using namespace std;
const int N=110;
int m,n;
int q[N][N];//将答案存入q数组
int main(){
cin >> n >> m;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};//其实偏移量矩阵dx,dy表示0,1,2,3四个方向的偏移量,这其实也就是为什么后面d换方向的时候要模4的原因,因为一共就是四个方向,如果方向增多了模的值就变了
int x=0,y=0,d=1;//起始时从第一个位置出发往1方向走,所以d=1
for(int i=1;i<=n*m;i++){
q[x][y] = i;
int a=x+dx[d],b=y+dy[d];
if(a<0||a>=n||b<0||b>=m||q[a][b]){//q[a][b]就是已经填充过的格子
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;
}
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla