Sunteți pe pagina 1din 2

Extras din document:

Analiza algoritmilor
1. S se genereze o matrice ptratic de dimensiune n cu elementele 1,2,,n2 aezate n spiral.
Exemplu pentru o matrice de dimensiune 4: .
import java.util.Scanner;
import java.util.Scanner;
public class M19 {
public static void genereazaMatriceSpirala(int[][] M){
int n = M.length;
int patrate;
int ns = n/2; //impartire
if (n % 2 == 0) patrate = ns; //daca avem dimensiune para vor fi n/2 patrate in interiorul matricii
else patrate = ns + 1; //daca avem dimensiune impara vor fi n/2+1, deoarece elementul "1" din mijloc va constitui un
patrat
//o adunare daca dimensiunea este impara
int j;
int k = n;
int element = n*n; //inmultire
if (k==1) M[0][0]=1;
else
for (int i = 0; i < patrate; i++) {
if(k==1){ M[ns][ns]=1; break;}
// linia de jos
for (j = 0; j < k; j++) {
M[n - 1 - i][i + j] = element--;
}
// coloana din dreapta
for (j = k-2; j >0 ; j--) {
M[i + j][n - 1 - i] = element--;
}
// linia de sus
for (j = k-1; j >= 0; j--) {
M[i][i + j] = element--;
}
// coloana din stanga
for (j = 1; j <k-1; j++) {
M[i + j][i] = element--;
}
k -= 2; //dimensiunea scade cu 2, adica s-a efectuat un contur complet de patrat
}
}
static void afisareMatrice(int[][] M,String mesaj) {
System.out.println(mesaj);
for (int i = 0; i < M.length; i++) {
for (int j = 0; j < M[i].length; j++) {
System.out.format("%5d", M[i][j]);
}
System.out.println();
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Scrieti dimensiunea matricei:");
int dim = sc.nextInt();
int[][] M = new int[dim][dim];
genereazaMatriceSpirala(M);
afisareMatrice(M,"Matricea generata in spirala:").