一个蛇形填充n×n矩阵的算法

该程序实现了一个蛇形填充n×n矩阵的算法。通过定义方向变量d(0表示右上,2表示左下),交替进行对角线填充:当向右上方超出边界时转向左下方,反之亦然。填充从a00=1开始,依次递增至n²。最后通过printArr函数输出填充完成的矩阵。核心逻辑是通过判断边界条件动态调整填充方向,实现蛇形走位填充二维数组。该算法时间复杂度为O(n²),空间复杂度为O(n²)。

cpp 复制代码
#include <stdio.h>
#include <math.h>

#define M  1001
int a[M][M];


void fun(int n){
	int k=1,i=0,j=0;
	int d =0;  //0右上角    2左下角 
	a[0][0]=k;
	
	while(k<=n*n){
		k++;
		if(d==0){ //右上角  i--,j++ 
			i--,j++;
			if(j==n){ //超出右边了, 
				i+=2,j--;
				d=2; //改方向 
			}else if(i<0){
				i++;
				d=2; //改方向 
			}
			a[i][j]=k;			
			continue;
		}
		if(d==2){//左下角 
			i++,j--;
			if(i==n){
				i--,j+=2;
				d=0;
			}else if(j<0){
				j++;
				d=0;
			}
			a[i][j]=k;			
			continue;
		}
		
	}
}

printArr(int n){
	int i,j;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++)
			printf("%d ",a[i][j]);
		puts("");
	}
}

int main() {    
	int n;
	scanf("%d",&n);
	fun(n);
	printArr(n);
    return 0;
}
相关推荐
hetao17338375 小时前
2026-10-03~04 hetao1733837 的刷题记录
c++·算法
Zootopia6266 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan6 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划
2601_960356387 小时前
2027校招采购岗解析:数学基础如何迁移到需求预测、成本与供应商分析
人工智能·算法
h_a_o777oah7 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO97 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician8 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.8 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
潼心1412o9 小时前
C++初阶(长期更新)第6讲:类和对象(下)
开发语言·c++·算法
星光开发者9 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express