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

该程序实现了一个蛇形填充n×n矩阵的算法。通过定义方向变量d(0表示右上,2表示左下),交替进行对角线填充:当向右上方超出边界时转向左下方,反之亦然。填充从a[0][0]=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;
}
相关推荐
AI应用实战 | RE3 分钟前
012、检索器(Retrievers)核心:从向量库中智能查找信息
人工智能·算法·机器学习·langchain
凤年徐5 分钟前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
Thomas.Sir8 分钟前
AI 医疗之罕见病/疑难病辅助诊断系统从算法到实现【表型驱动与知识图谱推理】
人工智能·算法·ai·知识图谱
tankeven30 分钟前
动态规划专题(03):区间动态规划从原理到实践(未完待续)
c++·算法·动态规划
田梓燊2 小时前
2026/4/11 leetcode 3741
数据结构·算法·leetcode
斯内科2 小时前
FFT快速傅里叶变换
算法·fft
葳_人生_蕤2 小时前
hot100——栈和队列
数据结构
2301_822703202 小时前
开源鸿蒙跨平台Flutter开发:幼儿疫苗全生命周期追踪系统:基于 Flutter 的免疫接种档案与状态机设计
算法·flutter·华为·开源·harmonyos·鸿蒙
贵慜_Derek2 小时前
Managed Agents 里,Harness 到底升级了什么?
人工智能·算法·架构
2301_822703202 小时前
鸿蒙flutter三方库实战——教育与学习平台:Flutter Markdown
学习·算法·flutter·华为·harmonyos·鸿蒙