Si a lo que te refieres es a que la vas a llenar de la siguiente forma, supongamos que la matriz es de 3, 4 (3 renglones y 4 columnas): 1 2 3 4 10 11 12 5 9 8 7 6 el ejemplo siguiente lo hace: #include <stdio.h> void MostrarMatriz(int matriz[][10], int n, int m); int main(void) { int num, count; int i, j; int n, m; int matriz[10][10]; int _matriz[10][10]={0}; int dirX, dirY; n = 10; //numero de renglones de la matriz m = 10; //numero de columnas de la matriz num = n*m; count = 0; dirX = 1; dirY = 0; for (i=j=0; count < num; count++) { matriz[j] = count+1; //rand()%100; _matriz[j] = 1; switch (dirX) { case 1 : j++; if (j==m || _matriz[j]) { j--; i++; dirX = 0; dirY = -1; } continue; case -1 : j--; if (j==-1 || _matriz[j]) { j++; i--; dirX = 0; dirY = 1; } continue; } switch (dirY) { case 1 : i--; if (i==-1 || _matriz[j]) { i++; j++; dirY = 0; dirX = 1; } continue; case -1 : i++; if (i==n || _matriz[j]) { i--; j--; dirY = 0; dirX = -1; } continue; } } MostrarMatriz(matriz, n, m); return 0; } void MostrarMatriz(int matriz[][10], int n, int m) { int i, j; printf("Matriz(%d,%d)\n\n", n, m); for (i=0; i<n; i++) { for (j=0; j<m; j++) { printf("% 4d", matriz[j]); } printf("\n"); } }