Prueba VIP preguntas ejercicios básicos para sacar el número (simulación)
Límite de recursos
Límite de tiempo: 1,0 s Límite de memoria: 512,0 MB
Descripción del problema
Obtener el número es tomar el número a lo largo del costado de la matriz. Si hay innumerables opciones en la dirección actual o si se han tomado, gire a la izquierda 90 grados. Comienza en la esquina superior izquierda de la matriz y la dirección es hacia abajo.
Formato de entrada
La primera línea de entrada son dos enteros positivos m, n no más de 200, indicando las filas y columnas de la matriz. Las siguientes m filas tienen n números enteros en cada fila, que representan esta matriz.
Formato de salida
La salida es solo una línea, un total de millones de números, que es el resultado de la búsqueda de la forma de la matriz de entrada. Separe los números con un espacio y no tenga espacios adicionales al final de la línea.
Entrada de muestra
3 3
1 2 3
4 5 6
7 8 9Salida de muestra
1 4 7 8 9 6 3 2 5
Entrada de muestra
3 2
1 2
3 4
5 6Salida de muestra
1 3 5 6 4 2
Código de implementación:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[201][201],book[201][201];//book为标志数组
int n,m;
int i,j;
scanf("%d%d",&m,&n);
memset(book,0,sizeof(book));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
book[i][j]=1;
}
int sum=0;
printf("%d",a[1][1]);
book[1][1]=0;
sum++;
i=2;j=1;//初始化一下
while(sum!=m*n)//输出全部的数时结束
{
//模拟向下时候;
while(book[i][j]==1&&i<=m)
{
book[i][j]=0;
sum++;
printf(" %d",a[i][j]);
i++;
}
i--;j++;
//模拟向左的时候:
while(book[i][j]==1&&j<=n)
{
book[i][j]=0;
sum++;
printf(" %d",a[i][j]);
j++;
}
//模拟向上的时候
i--;j--;
while(book[i][j]==1&&i>=1)
{
book[i][j]=0;
sum++;
printf(" %d",a[i][j]);
i--;
}
i++,j--;
//模拟向左的时候
while(book[i][j]==1&&j>=1)
{
book[i][j]=0;
sum++;
printf(" %d",a[i][j]);
j--;
}
j++;i++;
}
return 0;
}