Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
2.3 kB
1
Indexable
Never
void spiralSorrend(const int *matrix, int n, int *&spiral)
{
    int k = 0;  // index a spiral tombben
    int hossz = sqrt(n);    // a matrix oldalhossza
    int index = sqrt(n) - 1;    // a kovetkezo elem indexe

    while(hossz > 0)    // a feltetel teljesul amig van meg elem amit nem raktunk be a spiral tombbe
    {
        for(int i = 1; i < hossz; i++)  
        {
            spiral[k] = matrix[index];
            k++;
            index--;    // balrol jobbra haladva igy valtozik a kovetkezo elem indexe
        }

        for(int i = 1; i < hossz; i++)
        {
            spiral[k] = matrix[index];
            k++;
            index += sqrt(n);   // fentrol lefele haladva igy valtozik a kovetkezo elem indexe
        }

        for(int i = 1; i < hossz; i++)
        {
            spiral[k] = matrix[index];
            k++;
            index++;      // balrol jobbra haladva igy valtozik a kovetkezo elem indexe
        }

        for(int i = 1; i < hossz; i++)
        {
            spiral[k] = matrix[index];
            k++;
            index -= sqrt(n);   // lentrol felfele haladva igy valtozik a kovetkezo elem indexe
        }

        if(hossz == 1)
        {
            spiral[k] = matrix[index];  // paratlan n eseten a matrix kozepen levo elemet igy erjuk el, ez egy kulonleges eset
        }


        index += sqrt(n) - 1;   // megfelelo poziciora lepes egy kor utan
        hossz -= 2;     // egy kor bejarasa utan az oldalhossz 2-vel csokken
    }
}

void Kiir_Matrix(int n, const int *matrix)
{
    cout << "A matrix:" << endl;
    int gyok = sqrt(n);
    for(int i = 0; i < n; i++)
    {
        cout << matrix[i] << " ";
        if((i + 1) % gyok == 0)
        {
            cout << endl;
        }
    }
    cout << endl;
}

void Kiir_Spiral(int n, int *a)
{
    cout << "A spiral alak:" << endl;
    for(int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
}

int main()
{
    int n;
    Beolvas(n);
    const int *matrix = new int[n * n]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 };
    Kiir_Matrix(n, matrix);
    int *spiral = new int[n];
    spiralSorrend(matrix, n, spiral);
    Kiir_Spiral(n, spiral);
    delete[] matrix;
    delete[] spiral;

    return 0;
}