2018年阿里秋招線上筆試題——求冰田區域
阿新 • • 發佈:2019-02-11
目錄
文章目錄
問題描述
將一個區域,分成 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;
}