Amigo estaba con lo tuyo pero se me hizo tarde te dejo lo que logre hacer, espero que lo entiendaz, en ese ejemplo falta que el usuario carge la cantidad de filas y columnas de la matriz pero es facil hacer eso y refinar el tema del zigzag. porque me esta salteando algunos casos:
import java.util.Random;
public class zigzag {
public static boolean derAIz = false;
public static boolean primera = true;
public static boolean sumar = false;
public static void main (String[] arg){
int n = 3;
int m = 3;
int in = 0;
int im = m-1;
Random rnd = new Random();
int[][] matriz = new int[n][m];
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
//guardamos en la pos i j de la matriz un nº aleatoreo entre 0 y 100 (esto NO nos asegura que no se repitan numeros)
matriz[i][j] = rnd.nextInt(101);
//mostramos que tiene la matriz
System.out.print(matriz[i][j] + "-");
}
System.out.println();
}
//mostramos la matriz en zigzag
int col = 0;
//la cantidad de diagonales que tiene una matriz es la cantidad de filas + la cantidad de columnas - 1
int cantDiag = 1;
while (cantDiag != n+m-1){
if (derAIz){
mostrarDiagonalDerechaAIzquierda(matriz, im, col);
System.out.println();
} else {
mostrarDiagonalIzquierdaADerecha(matriz, im, n, m);
System.out.println();
}
if (col < m-1){
col++;
}
if(sumar){
im++;
} else {
if (im < 0){
im=0;
sumar = true;
} else if (!primera){
im--;
im--;
if (im < 0){
im=0;
sumar = true;
}
System.out.println("Se decremento im "+im + " col "+col);
} else {
primera = false;
}
}
cantDiag++;
//cambiamos el valor de verdad del flag de recorrido de la diagonal
derAIz = !derAIz;
}
}
public static void mostrarDiagonalDerechaAIzquierda(int[][] matriz, int fila, int col){
int i = fila;
int j = col;
//System.out.println("fila" + i + " col " + j);
while (i >= 0 && j >= 0){
System.out.print(matriz[i][j] + " ");
i--;
j--;
}
}
public static void mostrarDiagonalIzquierdaADerecha(int[][] matriz, int fila, int maxFila, int maxCol){
int i = fila;
int j = 0;
while (i < maxFila && j < maxCol){
System.out.print(matriz[i][j] + " ");
i++;
j++;
}
}
}