範例程式碼 uva10908

//uva10908
#include <iostream>
using namespace std;

int largestSquare(char grid[][101], int m, int n, int r, int c){
    int length = 1;

    while(1){

        // upper left corner, lower right corner 
        int ulx, uly, lrx, lry;

        ulx = r - length;
        uly = c - length;
        lrx = r + length;
        lry = c + length;

        // out of bound
        if( ulx < 0 || lrx >= m || uly < 0 || lry >= n )
            return length * 2 - 1;

        // top and down
        for(int i = ulx; i <= (r +length); i += length * 2){
            for(int j = uly; j <= lry; j++){
                if (grid[i][j] != grid[r][c])
                    return length * 2 - 1;
            }
        }

        // left and right
        for(int j = uly; j <= (c + length); j += length * 2){
            for(int i = ulx; i <= lrx; i++){
                if (grid[i][j] != grid[r][c])
                    return length * 2 - 1;
            }
        }
        length += 1;
    }
    
    return length * 2 - 1;
}


int main() {
    int t, m, n, q;
    cin >> t;
    while (t--){
        char grid[101][101] = {0};
        cin >> m >> n >> q;
        for (int i = 0; i < m; i++)
            for(int j = 0; j < n; j++)
                cin >> grid[i][j];

        int r, c;
        cout << m << " " << n << " " << q << "\n";
        while (q--){
            cin >> r >> c;
            cout << largestSquare(grid, m, n, r, c) << "\n";
        }
    }
}