Cod sursa(job #3203105)

Utilizator StefanromanulStefan Parus Stefanromanul Data 13 februarie 2024 09:25:22
Problema Castel Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
struct nr{

int viz=0,cheie=0,nr=0;
};
struct poz{
int x,y;

};
int f[22600];
    int n,m;
nr a[152][152];
int caut(int x,int y)
{
    poz start;
    start.x=x;
    start.y=y;
    queue <poz> q;
    q.push(start);
    while(!q.empty())
    {
        x=q.front().x;
        y=q.front().y;
        q.pop();
        if(a[x][y].viz<8 && x<=n && y<=m && x>=0 && y>=0)
        {
            a[x][y].viz++;

            ///sus
            if(a[x-1][y].cheie!=-1 && (f[a[x-1][y].cheie] || a[x-1][y].viz))
            {
                poz p;
                p.x=x-1;
                p.y=y;
                f[a[x-1][y].nr]++;
                q.push(p);
            }
            ///jos

             if(a[x+1][y].cheie!=-1 && (f[a[x+1][y].cheie] || a[x+1][y].viz))
            {
                poz p;
                p.x=x+1;
                p.y=y;
                f[a[x+1][y].nr]++;
              q.push(p);
            }



        ///stanga
           if(a[x][y-1].cheie!=-1 && (f[a[x][y-1].cheie] || a[x][y-1].viz))
            {
                poz p;
                p.x=x;
                p.y=y-1;
                f[a[x][y-1].nr]++;
              q.push(p);
            }
        ///dreapta
            if(a[x][y+1].cheie!=-1 && (f[a[x][y+1].cheie] || a[x][y+1].viz))
            {
                poz p;
                p.x=x;
                p.y=y+1;
                f[a[x][y+1].nr]++;
              q.push(p);
            }

    }
	}
}
int main()
{
    ifstream cin("castel.in");
    ofstream cout("castel.out");

    cin>>n>>m;
    for(int i=0;i<=n+1;i++)
    {
        a[i][0].cheie=-1;
        a[i][m+1].cheie=-1;

    }
    for(int i=0;i<=m+1;i++)
    {
        a[0][i].cheie=-1;
        a[n+1][i].cheie=-1;

    }
    int k;
    cin>>k;
    f[k]++;
    int x,y;
    int s=1;
    for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cin>>a[i][j].cheie;
                a[i][j].nr=s;
                if(k==s)
                {
                    x=i;
                    y=j;
                }
                s++;
            }
        }


    caut(x,y);s=0;
    for(int i=1;i<=n*m;i++)
        if(f[i])
        s++;

    cout<<s;
    return 0;
}