版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishang6257/article/details/79745419
目录
问题描述
将一个区域,分成 m×n 个块,若某一个块有冰则用 * 表示,无冰则用 0 表示,任给一个这样的区域,求冰田区域(冰田区域划分规则:如果两个小块之间能够在不穿越其他块的情况下连成直线,则**属于同一冰田区块)个数?
输入
输出
冰天块数
样例输入输出
- 输入
-
4 4
* 0 0 0
0 0 0 0
0 0 * 0
0 0 0 *
4 6
0 0 0 0 0 0
0 0 * 0 0 *
0 0 * * 0 0
0 0 0 * 0 * - 输出
-
2
3
问题分析
- 简单题,只需要判断右面,上面,右上面,左上面是否有冰即可
代码实现
IDE : vs code
编译器:MinGW
语言 :C++
#include <iostream>
#define maxLen 100
using namespace std;
int main()
{
int m,n;
char a[maxLen][maxLen];
while(cin >> m >> n && m && n){
for(int i = 0;i < m;i ++){
for(int j = 0;j < n;j ++)
cin >> a[i][j];
}
int b[maxLen][maxLen] = {0},id = 1;
for(int i = 0;i < m;i ++){
for(int j = 0;j < n;j ++){
if(a[i][j] == '*'){
if(j != 0 && a[i][j-1] == '*') //有左方元素
b[i][j] = b[i][j-1];
else if(i != 0 && a[i-1][j] == '*') //有上方元素
b[i][j] = b[i - 1][j];
else if(i != 0 && j != 0 && a[i-1][j-1] == '*')//左上
b[i][j] = b[i-1][j-1];
else if(i != 0 && j != n-1 && a[i-1][j+1] == '*')//右上
b[i][j] = b[i-1][j+1];
else
b[i][j] = id ++;
}
}
}
cout << id - 1 << endl;
}
return 0;
}