染色联通块:
一个格联通的所有格
每个对应的最大可联通格子的个数均相同
分析:
1.只需要计算每个块里的元素个数
2.元素标记对应某个块
3.查找元素时:
由 (1)元素坐标->
(2)查找对应块的编号(visit[]查询)->
(3)输出对应块的元素个数(item[]查询)
代码如下:
int next1[5][3] = { {1,0},{-1,0},{0,1},{0,-1} };
char map[1009][1009] = {0};
int visit[1009][1009] = { 0 };
int item[1000009] = { 0 }, k = 1;
scanf("%d %d", &num, &check);
for (int i = 0; i < num; i++)
for (int i = 0; i < num; i++)
for (int j = 0; j < num; j++)
visit[i][j] = k; item[k] = 1;
for (int i = 0; i < check; i++)
scanf("%d %d", &t1, &t2);
cout << item[visit[t1 - 1][t2 - 1]] << endl;
for (int i = 0; i < 4; i++)
int tx = x + next1[i][0], ty = y + next1[i][1];
if (tx < 0 || tx >= num || ty < 0 || ty >= num) continue;
if (map[x][y] == map[tx][ty]) continue;