注意不要越界,用string【】代替char【】

#include<iostream>
#include<string.h>
#include<stack>
#include<vector>
#include<algorithm>
#include<string>
#include<functional>
#include<queue>
using namespace std;
string room[1000000];
int dir[4][2] = { {0,1},{0,-1},{1,0} ,{-1,0} };
stack<int>memory;
int n, m;
struct node {
    int x, y;
};
bool check(int x,int y)
{
    if (x < n && x >= 0 && y >= 0 && y < m)return true;
    else return false;
}
void bfs(int dx,int dy)
{
    int num,i,j,k;
queue<node>a;
node stay, next;
if (room[dx][dy] != '.')return;
stay.x = dx; stay.y = dy;
room[stay.x][stay.y] = '&';
a.push(stay);
while (!a.empty())
{
    stay = a.front();
    a.pop();
    for (i = 0; i < 4; i++)
    {
        next.x = stay.x+dir[i][0]; next.y = stay.y+dir[i][1];
        if (check(next.x, next.y) && room[next.x][next.y] == '.')
        {
            room[next.x][next.y] = '&';
            a.push(next);
        }
    }
}
}
int main()
{
    int i, j, k,num=0;
    cin >> n >> m;
    for (i = 0; i < n; i++)
    {
        cin >> room[i];
    }

    for (int i = 0; i < n; i++) {
        if (room[i][0] == '.')
            bfs(i, 0);
    }
    for (int i = 0; i < n; i++) {
        if (room[i][m - 1] == '.')
            bfs(i, m - 1);
    }
    for (int i = 0; i < m; i++) {
        if (room[0][i] == '.')
            bfs(0, i);
    }
    for (int i = 0; i < m; i++) {
        if (room[n - 1][i] == '.')
            bfs(n - 1, i);
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            if (room[i][j] == '.' || room[i][j] == '#')
                num++;
        }
    }
    cout << num;
}