Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 114 Muzeu : Ianuarie 15, 2016, 13:13:31
Buna ziua! Tot incerc de ceva timp sa fac prblema dar nu reusesc sa iau decat 10 pct. Am pus in coada direct toate pozitiile paznicililor. nu pot sa inteleg ce am gresit. Las si programul meu, in caz ca ma poate ajuta cineva.
Cod:
#include <fstream>
#define NV 4
#define Nmax 62500
using namespace std;
ifstream fin("muzeu.in");
ofstream fout("muzeu.out");
int a[252][252],n,k,p,u;
struct Pct{int x,y;};
Pct c[Nmax];
int dx[NV] = {-1,0,1,0};
int dy[NV] = {0,1,0,-1};

void citire();
void Lee();
void afisare();

int main()
{
    citire();
    Lee();
    afisare();
    return 0;
}

void citire()
{
    int i,j;
    char sir[252];
    fin>>n;
    fin.get();
    for(i=1; i<=n; i++)
    {
        fin.getline(sir,252);
        for(j=1; j<=n; j++)
        {
            if(sir[j-1]=='.')
                a[i][j]=-1;
            else if(sir[j-1]=='#')
                a[i][j]=-2;
            else
            {
                a[i][j]=0;
                c[u].x=i;
                c[u++].y=j;
            }
        }
    }
}

void Lee()
{
    Pct B,C;
    u--;
    int i;
    while(p<=u)
    {
        B.x=c[p].x;
        B.y=c[p].y;
        p++;
        for(i=0; i<NV; i++)
        {
            C.x=B.x+dx[i];
            C.y=B.y+dy[i];
            if(a[C.x][C.y]==-1)
            {
                a[C.x][C.y]=a[B.x][B.y]+1;
                u++;
                c[u].x=C.x;
                c[u].y=C.y;

            }
        }
    }
}

void afisare()
{
    int i,j;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
            if(a[i][j]<0)
                fout<<a[i][j]<<" ";
            else
                fout<<" "<<a[i][j]<<" ";
        fout<<"\n";
    }
}


Editat de moderator: Încearcă să foloseşti tag-ul [code ] [ /code] atunci când vrei să inserezi fragmente din surse.
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines