Acceder Registrarme

MATRIZ - RECORRIDO EN ESPIRAL (C++)


Por: Sergio Arteaga Publicado el: 2016-11-12 13:27:08 Pregunta abierta

Hola!

Quisiera que  me ayuden a escribir el código para realizar un recorrido en forma espiral para una matriz de 5x5. Se que se desarrolla con el bucle for, pero de todas maneras necesito ayuda. Ojala puedan ayudarme, gracias de antemano!



C++

Usuario de (Perú)

Hola Sergio, aquí tienes un ejemplo de como podrías hacer esto para una matriz de 5x5. Espero te sirva. Saludos.

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
	int matriz[5][5], fila=0, columna=0, filaActual=0, primeraFila=0, ultimaFila=4, columnaActual=0, primeraColumna=0, ultimaColumna=4, bandera=0;
	bool avanzarFila=false, avanzarColumna=true;
	
	matriz[0][0]=1;
	matriz[0][1]=2;
	matriz[0][2]=3;
	matriz[0][3]=4;
	matriz[0][4]=5;
	
	matriz[1][0]=6;
	matriz[1][1]=7;
	matriz[1][2]=8;
	matriz[1][3]=9;
	matriz[1][4]=10;
	
	matriz[2][0]=11;
	matriz[2][1]=12;
	matriz[2][2]=13;
	matriz[2][3]=14;
	matriz[2][4]=15;
	
	matriz[3][0]=16;
	matriz[3][1]=17;
	matriz[3][2]=18;
	matriz[3][3]=19;
	matriz[3][4]=20;
	
	matriz[4][0]=21;
	matriz[4][1]=22;
	matriz[4][2]=23;
	matriz[4][3]=24;
	matriz[4][4]=25;
	
	for(int i=0; i<19; i++)
	{
		if(avanzarColumna)
		{
			cout<<matriz[filaActual][columna]<<"...";
			
			if(bandera%2==0)
			{
				columna++;
				
				if(columna==ultimaColumna)
				{
					cout<<matriz[filaActual][columna]<<"...";
					
					columnaActual=ultimaColumna;
					ultimaColumna--;
					columna=ultimaColumna;
					
					avanzarColumna=false;
					avanzarFila=true;
					
					fila++;
					
					continue;
				}
			}
			else
			{
				columna--;
				
				if(columna==primeraColumna)
				{
					cout<<matriz[filaActual][columna]<<"...";
					
					columnaActual=primeraColumna;
					primeraColumna++;
					columna=primeraColumna;
					
					avanzarColumna=false;
					avanzarFila=true;
					
					continue;
				}
			}
		}
		
		if(avanzarFila)
		{
			cout<<matriz[fila][columnaActual]<<"...";
			
			if(bandera%2==0)
			{
				fila++;
				
				if(fila==ultimaFila)
				{
					cout<<matriz[fila][columnaActual]<<"...";
					
					filaActual=ultimaFila;
					ultimaFila--;
					fila=ultimaFila;
					
					avanzarFila=false;
					avanzarColumna=true;
					
					bandera++;
					
					continue;
				}
			}
			else
			{
				fila--;
				
				if(fila==primeraFila)
				{
					primeraFila++;
					filaActual=primeraFila;
					fila=primeraFila;
					
					avanzarFila=false;
					avanzarColumna=true;
					
					bandera++;
					
					continue;
				}
			}
		}
	}
	
	return 0;
}

El programa fue realizado en Zinjai por si lo quieres compilar para probarlo.

  • 2016-11-12 14:29:52
  • Me gusta(0)

  • Debes estar logueado para realizar comentarios