Cod sursa(job #1341316)

Utilizator mag9e2014MAG E 2014 mag9e2014 Data 12 februarie 2015 17:08:24
Problema Ferma Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.56 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <iomanip>
#include <vector>
using namespace std;
struct koord
{
    int x,y;
};
int main()
{
    ifstream be("ferma.in");
    ofstream ki ("ferma.out");
    int v,m,n;
    be >> v >> m >>n;
    char tomb[m][n];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            be >> tomb[i][j];
        }
    }
    char tomb2[m+2][n+2];
       for(int i=0;i<m+2;i++)
    {
        for(int j=0;j<n+2;j++)
        {
            if(i==0 ||j==0 || i==m+1 || j==n+1)
            {
                tomb2[i][j]=0;
            }
            else{
            tomb2[i][j]=tomb[i-1][j-1];}
        }
    }
        int volt[m+2][n+2];
        for(int i=0;i<m+2;i++)
    {
        for(int j=0;j<n+2;j++)
        {
            volt[i][j]=0;
        }
    }
        int ln=0;
        int jel;
        int sz=0;
        vector<int>  ter;
        for(int i=1;i<m+1;i++)
        {
            for(int j=1;j<n+1;j++)
            {
                if(!(volt[i][j]))
                {
                    sz++;
                    queue<koord> jar;
                    koord k;
                    k.x=i;
                    k.y=j;
                    jar.push(k);
                    volt[k.x][k.y]=sz;
                    jel=1;
                    koord cs;
                    while(jar.size()>0)
                    {
                        cs=jar.front();
                        jar.pop();
                     if(tomb2[cs.x][cs.y]==tomb2[cs.x-1][cs.y] && !(volt[cs.x-1][cs.y]))
                     {
                         k.x=cs.x-1;
                         k.y=cs.y;
                        jar.push(k);
                        volt[cs.x-1][cs.y]=sz;
                        jel++;
                       // cout << "bal";

                     }
                        if(tomb2[cs.x][cs.y]==tomb2[cs.x+1][cs.y] && !(volt[cs.x+1][cs.y]))
                     {
                         k.x=cs.x+1;
                         k.y=cs.y;
                        jar.push(k);
                        volt[cs.x+1][cs.y]=sz;
                        jel++;
                       // cout << "jobb";
                     }
                        if(tomb2[cs.x][cs.y]==tomb2[cs.x][cs.y-1] && !(volt[cs.x][cs.y-1]))
                     {
                         k.x=cs.x;
                         k.y=cs.y-1;
                        jar.push(k);
                        volt[cs.x][cs.y-1]=sz;
                        jel++;
                       // cout << "le";
                     }
                        if(tomb2[cs.x][cs.y]==tomb2[cs.x][cs.y+1] && !(volt[cs.x][cs.y+1]))
                     {
                         k.x=cs.x;
                         k.y=cs.y+1;
                        jar.push(k);
                        volt[cs.x][cs.y+1]=sz;
                        jel++;
                       // cout << "fel";
                     }
                    }
                ter.push_back(jel);
                }
                      if(ln<jel)
                    {
                        ln=jel;
                    }
            }
        }
        if(v==1)
        {
         ki << ln;}
//         for(int i=1;i<m+1;i++)
//         {
//             for(int j=1;j<n+1;j++)
//             {
//
//                 cout << setw(3) << volt[i][j];
//             }
//             cout << endl;
//         }
//         for(int i=0;i<ter.size();i++)
//         {
//             cout << ter[i] << " ";
//         }


    return 0;
}