Cod sursa(job #1095704)

Utilizator classiusCobuz Andrei classius Data 31 ianuarie 2014 18:38:31
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
using namespace std;

#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<set>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<utility>
#include<cstdio>
#include<cstdlib>
#include<cassert>
#include<numeric>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<deque>

const int INFI=(1LL<<29)-100;
const long long INFL=(1LL<<62);
const double eps=1e-15;
const long double pi=acos(-1.0);
const int MAXN=30;

vector<int> v[MAXN];
vector<pair<int,int> > sc;
int nt[MAXN];
bool vis[MAXN];

void bfs(int i){

}

void mark(int i){

}

int main(){
    freopen("date.in","r",stdin);
    freopen("date.out","w",stdout);

    int n;
    scanf("%d",&n);
    scanf("%*c");

    char a[MAXN][MAXN]={};
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%c",&a[i][j]);
        }
        scanf("%*c");
    }

    int ok[MAXN][MAXN]={};
    int nr=0;

    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(!ok[i][j]){
                queue<pair<int,int> > q;
                q.push(make_pair(i,j));

                int ve[4][2]={{0,1},{0,-1},{1,0},{-1,0}};

                #define vi i+ve[t][0]
                #define vj j+ve[t][1]

                while(!q.empty()){
                    int i=q.front().first;
                    int j=q.front().second;
                    q.pop();

                    for(int t=0;t<4;t++){
                        if(a[vi][vj]=='?'){
                            if(!ok[vi][vj]){
                                ok[vi][vj]=++nr;
                                q.push(make_pair(vi,vj));
                            }
                            v[ok[i][j]].push_back(ok[vi][vj]);
                        }else if(a[vi][vj]){
                            nt[ok[i][j]]|=(1<<(a[vi][vj]-'0'));
                        }
                    }
                }
            }
        }
    }



    return 0;
}