注意不要越界,用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; }