解題心得
輸入很麻煩的題目。
程式碼
#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;
}
沒有留言:
張貼留言