解題心得
輸入很麻煩的題目。
程式碼
#include <iostream> #include <string> #include <queue> using namespace std; struct Point { int x, y; }; char map[100][100]; int main() { int T, dx[4] = { -1,1,0,0 }, dy[4] = { 0,0,-1,1 }; cin >> T; while (T--) { int i, j, n = 0, m = 0, area = 0; string s; cin >> i >> j; i -= 1, j -= 1; getline(cin, s); while (getline(cin,s) && s.size()) { for (int i = 0; i < s.size(); i++) map[m][i] = s[i]; n = s.size(); m++; } Point start, now; queue<Point> q; start.x = i, start.y = j; map[start.x][start.y] = '@'; q.push(start); while(!q.empty()) { now = q.front(); q.pop(); //cout << now.x << " " << now.y << endl; area++; for (int i = 0; i < 4; i++) { Point p; p.x = now.x + dx[i], p.y = now.y + dy[i]; //cout << "--" << p.x << " " << p.y << endl; if (p.x >= 0 && p.x < m && p.y >= 0 && p.y < n && map[p.x][p.y] == '0') { map[p.x][p.y] = '@'; q.push(p); } } } cout << area << endl; } return 0; }
沒有留言:
張貼留言