Pagini recente » Borderou de evaluare (job #691567) | Cod sursa (job #806394) | Cod sursa (job #309082) | Cod sursa (job #550267) | Cod sursa (job #1095704)
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;
}