C
113
pipe c
Guest on 6th June 2022 01:15:32 AM
#include <stdio.h>
#define RIGHT 0
#define DOWN 1
#define LEFT 2
#define UP 3
int n, m;
int wayx[4] = {0, 1, 0, -1};
int wayy[4] = {1, 0, -1, 0};
int conn[128][4];
int used[55][55];
char map[55][55];
int valid(int x, int y)
{
return x >= 0 && x < n && y >= 0 && y < m;
}
void floodfill(int x, int y)
{
int i, tx, ty;
used[x][y] = 1;
for(i=0; i<4; i++)
{
tx = x + wayx[i];
ty = y + wayy[i];
if(valid(tx, ty) && !used[tx][ty] && conn[map[x][y]][i] && conn[map[tx][ty]][(i+2)%4])
{
floodfill(tx, ty);
}
}
}
int main()
{
int i, j, c;
conn['A'][UP] = conn['A'][LEFT] = 1;
conn['B'][UP] = conn['B'][RIGHT] = 1;
conn['C'][DOWN] = conn['C'][LEFT] = 1;
conn['D'][DOWN] = conn['D'][RIGHT] = 1;
conn['E'][DOWN] = conn['E'][UP] = 1;
conn['F'][LEFT] = conn['F'][RIGHT] = 1;
conn['G'][LEFT] = conn['G'][RIGHT] = conn['G'][UP] = 1;
conn['H'][LEFT] = conn['H'][DOWN] = conn['H'][UP] = 1;
conn['I'][LEFT] = conn['I'][RIGHT] = conn['I'][DOWN] = 1;
conn['J'][RIGHT] = conn['J'][DOWN] = conn['J'][UP] = 1;
conn['K'][LEFT] = conn['K'][DOWN] = conn['K'][UP] = conn['K'][RIGHT] = 1;
while(scanf("%d%d", &n
, &m
) == 2)
{
for(i=0; i<n; i++)
{
}
memset(used
, 0, sizeof(used
));
for(i=0, c=0; i<n; i++)
{
if(!used[i][0] && conn[map[i][0]][LEFT])
{
c++;
floodfill(i, 0);
}
if(!used[i][m-1] && conn[map[i][m-1]][RIGHT])
{
c++;
floodfill(i, m-1);
}
}
for(i=0; i<m; i++)
{
if(!used[0][i] && conn[map[i][0]][UP])
{
c++;
floodfill(0, i);
}
if(!used[n-1][i] && conn[map[i][0]][DOWN])
{
c++;
floodfill(n-1, i);
}
}
}
return 0;
}