solution-sp206
题解 SP206 【BITMAP - Bitmap】
此题暴力其实就可以水掉,甚至不需要搜索。
看一看数据:
1 <= n <= 182,1 <= m <= 182
还有时间限制:
时间限制 | 内存限制
\(\quad\;\)4.00s | 1.46GB

我们用一个vector存储所有1的位置,这样只要1的个数不是很多,就不会T飞。
代码
// 此处应有头文件
const int N = 2e2 + 10;
int t;
int n,m;
char a[N][N];
struct node
{
int x,y;
};
vector<node> s;
int distance(int sx , int sy , int fx , int fy) // 曼哈顿距离
{
return abs(sx - fx) + abs(sy - fy);
}
int main()
{
cin >> t;
while(t--)
{
s.clear(); // 别忘了清空vector
cin >> n >> m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
{
cin >> a[i][j];
if(a[i][j] == '1')
s.push_back( (node){i , j} ); // 把1的位置存入vector
}
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
if(a[i][j] == '1') // 一个小小的优化,防止被全1的数据卡飞
{
cout << "0 ";
continue;
}
int minn = 1 << 30; // 2 ^ 30
for(int k = 0;k < s.size();k++)
minn = min(distance(i , j , s[k].x , s[k].y) , minn); // 统计出最小距离
cout << minn << " ";
}
endline;
}
}
return 0;
}

浙公网安备 33010602011771号