Untitled

 avatar
unknown
plain_text
4 years ago
1.5 kB
7
Indexable
#include <iostream>
#include <string>
#include <math.h>
#include <climits>
#include <vector>
#include <algorithm>

using namespace std;
typedef long long ll;
typedef double db;
const long long mod = 1e9 + 7;
int r[]={0, -1, 0, 1}, c[] = {-1, 0, 1, 0};
int n, m, vs[105][105]={0};
char a[105][105];
void input () {
    cin >> n >> m;
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            cin >> a[i][j];
}
bool check (int row, int col) {
    return (row >= 0 && row < m && col >= 0 && col < n && a[row][col] == 'O' && !vs[row][col]);
}
void dfs (int row, int col) {
    a[row][col] = '-';
    for (int i=0; i<4; i++) {
        if (check(row+r[i], col+c[i])) {
            vs[row+r[i]][col+c[i]] = 1;
            dfs (row + r[i], col + c[i]);
        }
    }
}
void horizontal (int x) {
    for (int i=0; i<m; i++) 
        if (a[x][i] == 'O') 
            dfs (x, i);
    
}
void vertical (int x) {
    for (int i=0; i<n; i++) 
        if (a[i][x] == 'O') 
            dfs (i, x);
}
void solve () {
    horizontal (0);
    if (n > 1)
    horizontal (n-1);
    vertical (0);
    if (m > 1)
    vertical (m-1);
}
void result () {
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            if (a[i][j] == '-') cout << "O ";
            else cout << "X ";
        }
        cout << endl;
    }
}
int main () {
    int t;
    cin >> t;
    while (t--) {
        input();
        solve();
        result();
    }
    return 0;
}
Editor is loading...