第9题题解
第9题题解
h>
using namespace std;
#define int long long
vector<vector<pair<int, int>>> MAP;
int m, n;
int num = 0;
int zzxc(int a, int b)
{
if (a < b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int d = 1;
while (d)
{
d = a % b;
a = b;
b = d;
}
return a;
}
void dfs(int i, int j)
{
if (i < 0 || i >= m || j < 0 || j >= n)
return;
MAP[i][j].second = 1;
num++;
if (!(i + 1 < 0 || i + 1 >= m || j < 0 || j >= m) && MAP[i + 1][j].second != 1
&& zzxc(MAP[i][j].first, MAP[i + 1][j].first) > 1)
dfs(i + 1, j);
if (!(i - 1 < 0 || i - 1 >= m || j < 0 || j >= m) && MAP[i - 1][j].second != 1
&& zzxc(MAP[i][j].first, MAP[i - 1][j].first) > 1)
dfs(i - 1, j);
if (!(i < 0 || i >= m || j + 1 < 0 || j + 1 >= m) && MAP[i][j + 1].second != 1
&& zzxc(MAP[i][j].first, MAP[i][j + 1].first) > 1)
dfs(i, j + 1);
if (!(i < 0 || i >= m || j - 1 < 0 || j - 1 >= m) && MAP[i][j - 1].second != 1
&& zzxc(MAP[i][j].first, MAP[i][j - 1].first) > 1)
dfs(i, j - 1);
}
void solve()
{
cin >> m >> n;
MAP.resize(m);
for (vector<vector<pair<int, int>>>::iterator it = MAP.begin(); it !=
MAP.end(); it++)
{
vector<pair<int, int>> t(n);
for (vector<pair<int, int>>::iterator it2 = t.begin(); it2 != t.end(); it2+
+)
{
int temp;
cin >> temp;
*it2 = make_pair(temp, 0);
}
*it = t;
}
int a, b;
cin >> a >> b;
dfs(a - 1, b - 1);
cout << num;
}
signed main(void)
{
int _ = 1;
while (_--)
{
solve();
}
return 0;
}