Pagini recente » Cod sursa (job #469487) | Cod sursa (job #831163) | Cod sursa (job #1226249) | Cod sursa (job #1122213) | Cod sursa (job #2365384)
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, nr, st, dr;
char a[101][101];int b[101][101];
bool C[101][101];
int dx[] = {0, -1, 1, 0, 0};
int dy[] = {0, 0, 0, 1, -1};
struct rebus {
int l, c, v;
}q[20000];
ifstream fin ("rebus.in");
ofstream fout ("rebus.out");
void coada (int x, int y)
{
int ln=0, cn=0;
int st=1, dr=1;
q[st].l=x;
q[st].c=y;
q[st].v=b[x][y];
C[x][y]=1;
while (st<=dr) {
int l=q[st].l;
int c=q[st].c;
int v=q[st].v;
if ((v&1)!=0) {
cn=c-1;
ln=l;
if (ln>=1 && ln<=n && cn>=1 && cn<=n && b[ln][cn]>0 && C[ln][cn]==0) {
q[++dr].l=ln;
q[dr].c=cn;
C[ln][cn]=1;
}
cn=c+1;
ln=l;
if (ln>=1 && ln<=n && cn>=1 && cn<=n && b[ln][cn]>0 && C[ln][cn]==0) {
q[++dr].l=ln;
q[dr].c=cn;
C[ln][cn]=1;
}
}
if ((v&2)!=0) {
ln=l-1;
cn=c;
if (ln>=1 && ln<=n && cn>=1 && cn<=n && b[ln][cn]>0 && C[ln][cn]==0) {
q[++dr].l=ln;
q[dr].c=cn;
C[ln][cn]=1;
}
ln=l+1;
cn=c;
if (ln>=1 && ln<=n && cn>=1 && cn<=n && b[ln][cn]>0 && C[ln][cn]==0) {
q[++dr].l=ln;
q[dr].c=cn;
C[ln][cn]=1;
}
}
st++;
}
}
int verif (int l, int c, int dir)
{
if (dir==1) {
while (l>=1 && a[l][c]!='#') {
l--;
if (a[l][c]=='.') {
return 0;
}
}
return 1;
}
if (dir==3) {
while (l<=n && a[l][c]!='#') {
l++;
if (a[l][c]=='.')
return 0;
}
return 1;
}
if (dir==2) {
while (c<=n && a[l][c]!='#') {
c++;
if (a[l][c]=='.')
return 0;
}
return 1;
}
while (c>=1 && a[l][c]!='#') {
c--;
if (a[l][c]=='.')
return 0;
}
return 1;
}
void repl(int l, int c, int dir)
{
if (dir==1) {
while (l>=1 && a[l-1][c]!='#') {
l--;
b[l][c]+=2;
}
return;
}
if (dir==3) {
while (l<=n && a[l+1][c]!='#') {
l++;
b[l][c]+=2;
}
return;
}
if (dir==2) {
while (c<=n && a[l][c+1]!='#') {
c++;
b[l][c]+=1;
}
return;
}
while (c>=1 && a[l][c-1]!='#') {
c--;
b[l][c]+=1;
}
return;
}
int main () {
fin>>n>>m;
for (i=1;i<=n;i++) {
for (j=1;j<=m;j++) {
fin>>a[i][j];
if (a[i][j]=='#')
b[i][j]=-1;
}
}
for (i=1;i<=n;i++) {
for (j=1;j<=m;j++) {
if (a[i][j]=='#') {
if (a[i-1][j]=='*')
if (verif(i-1, j, 1))
repl(i, j, 1);
if (a[i+1][j]=='*')
if (verif(i+1, j, 3))
repl(i, j, 3);
if (a[i][j+1]=='*')
if (verif(i, j+1, 2))
repl(i, j, 2);
if (a[i][j-1]=='*')
if (verif(i, j-1, 4)==1)
repl(i, j, 4);
}
}
}
for (i=1;i<=n;i++) {
for (j=1;j<=m;j++) {
if (b[i][j]>0 && C[i][j]==0) {
nr++;
coada(i, j);
}
}
}
for (i=1;i<=n;i++) {
for (j=1;j<=m;j++)
fout<<C[i][j]<<" ";
fout<<"\n";
}
fout<<nr;
return 0;
}