Recorrido de matriz diagonal secundaria c++

Iniciado por SojatDotar, 19 Octubre 2015, 21:47 PM

0 Miembros y 1 Visitante están viendo este tema.

SojatDotar

Buenas, me podrían ayudar en hacer el recorrido de una matriz de la diagonal secundaria, una matriz de entero de modo que tenga se vea así http://prntscr.com/8ssapl lo he pensando de varias forma, pero no logro que se vea así, el código que tengo es
#include <iostream>
using namespace std;

int main () {

int mat[4][4];
int cont=1;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){

mat[j][i]=cont++;

}
}
int k=0,r=0;
for(int i=0; i<7; i++){
r=(i/4);

for(int j=k; j>=0; j--){

cout << mat[r][j]<<" ";
r++;
}
cout << endl;
k++;
k-=k/4;
}

cin.get();
return 0;
}

engel lex

fijate algo, tu recorrido sería

0,0
0,1|1,0
0,2|1,1|2,0
0,3|1,2|2,1|3,0
1,3|2,2|3,1
2,3|3,2
3,3


si las coordenadas son(X,Y):

fijate que cada par suma el numero del ciclo donde está (primero 0, 1, etc)...

primero, la coordenada inicial se le suma 1 en Y, hasta que y llega al tope, entonces se le suma 1 a X hasta que ambos llegan al tope donde es el fin

sobre cada ronda, siempre le resta uno a la Y y se lo sumas a la X, terminando donde Yfinal = Xinicial...


creo que esto es suficiente info para que te pienses el algoritmo de recorrido ;)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.


geeke

#include <stdio.h>

int main(void)
{
    int matriz[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
    int x = 0, y = 0, i;

    for(;;)
    {
        printf("%*s", ((y == 0) ? 3 - x : y) * 2, "");
        for(i = 0; x - i >= 0 && y + i < 4  ; i++)
        {
            printf("%3d ", matriz[x - i][y + i]);
        }
        printf("\n");
        if(x < 3)
            ++x;
        else if(y < 3)
            ++y;
        else
            break;
    }
    return 0;
}

SojatDotar

Gracias, pero mas que el código me gustaría mas comprender su elaboración, todavía no comprendo bien como hacer el ejercicio, eso es mas que todo mi problema