Cod sursă (job #582156)

Utilizator avatar Vlad_Anica Anica-Popa Vlad-Ioan Vlad_Anica IP ascuns
Problemă Pointeri Compilator cpp-32 | 1,00 kb
Rundă Arhiva de probleme Status evaluat
Dată 17 feb. 2021 12:58:23 Scor 50
#include <iostream>
#include <stdio.h>

using namespace std;
const int NMAX = 200000, HMAX = 1000;

int st[NMAX], dr[NMAX];
int ord[NMAX + 2], op = 1;

void dfs(int ptr);

int main()
{
    int n, i, rad;
    FILE *fin = fopen("pointeri.in", "r");
    fscanf(fin, "%d%d", &n, &rad);
    for (i = 0; i < n; i++)
        fscanf(fin, "%d", &st[i]);

    for (i = 0; i < n; i++)
        fscanf(fin, "%d", &dr[i]);
    fclose(fin);

    dfs(rad);

    ord[0] = -1;
    ord[n + 1] = -1;

    for (i = 1; i <= n; i++)
    {
        st[ord[i]] = ord[i - 1];
        dr[ord[i]] = ord[i + 1];
    }

    FILE *fout = fopen("pointeri.out", "w");
    fprintf(fout, "%d\n", ord[1]);
    for (i = 0; i < n; i++)
        fprintf(fout, "%d ", st[i]);
    fprintf(fout, "\n");
    for (i = 0; i < n; i++)
        fprintf(fout, "%d ", dr[i]);
    fclose(fout);

    return 0;
}

void dfs(int ptr)
{
    if (ptr == -1)
        return;
    dfs(st[ptr]);
    ord[op++] = ptr;
    dfs(dr[ptr]);
}