亚马逊经典面试题实例详解分享

—-想了解亚马逊经典面试题实例详解分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

亚马逊面试题:

如下所示的Map中,0代表海水,1代表岛屿,其中每一个岛屿与其八领域的区间的小岛能相连组成岛屿群。写代码,统计Map中岛屿个数。

  /*   Q1.   Map   [   0 0 0 0 0 0 0 0   0 1 0 0 0 0 0 0   0 1 1 0 0 0 0 0   0 0 0 0 0 0 1 0   0 0 0 0 0 1 0 0   0 0 0 0 0 0 0 0   ]   */    

实现代码:

  #include<iostream>  #include<queue>  using namespace std;    typedef struct {    int i;    int j;  }position;    void search(int a[][], int n, int i, int j, int cnt) {      queue<position> qu = new queue<position>();      position p;    p.i = i;    p.j = j;      qu.push(p);    a[i][j] = cnt;      while (!qu.empty()) {      p = qu.pop();        for (int ii = p.i - 1; ii <= p.i + 1; ii++) {        for (int jj = p.j - 1; jj <= p.j + 1; jj++) {          if (ii >= 0 && ii < n && jj >= 0 && jj < n && a[ii][jj] == 1 && (ii != i || jj != j)) {            a[ii][jj] = cnt;            p.i = ii;            p.j = jj;            qu.push(p);          }        }      }    }  }    int count(int a[][], int n) {    int cnt = 1;    for (int i = 0; i < n; i++) {      for (int j = 0; j < n; j++) {        if (a[i][j] == 1) {          cnt++; // 发现一个新陆地          search(a, n, i, j, cnt);        }      }    }    return cnt;  }      int main() {      int n;    cin >> n;      int a[][] = new int[n][n];    for (int i = 0; i < n; i++) {      for (int j = 0; j < n; j++) {        cin >> a[i][j];      }    }      int cnt = count(a, n);      cout << cnt - 1 << endl;        return 0;  }    

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/488589.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐