leetcode 200.岛屿数量 c代码
生活随笔
收集整理的這篇文章主要介紹了
leetcode 200.岛屿数量 c代码
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目如下:
給定一個(gè)由 '1'(陸地)和 '0'(水)組成的的二維網(wǎng)格,計(jì)算島嶼的數(shù)量。一個(gè)島被水包圍,并且它 是通過(guò)水平方向或垂直方向上相鄰的陸地連接而成的。你可以假設(shè)網(wǎng)格的四個(gè)邊均被水包圍。示例一: 輸入: 11110 11010 11000 00000輸出: 1示例二: 輸入: 11000 11000 00100 00011輸出: 3解法比較簡(jiǎn)單,遍歷數(shù)組,遇到陸地1的時(shí)候,遞推訪問(wèn)它的上下左右相鄰的陸地,然后將它們置為-1,遞推完成后島嶼個(gè)數(shù)加一。整個(gè)遍歷完成后返回島嶼個(gè)數(shù)即可。代碼實(shí)現(xiàn)上使用遞推,非常巧妙。我一開始使用棧的方式,代碼200+。使用遞推40+左右完成。
下面時(shí)本題c語(yǔ)言實(shí)現(xiàn):
/** 大體思路:遍歷數(shù)組,每次遇到一個(gè)島嶼則遍歷該島嶼周邊,將所有連在一起的陸地置為負(fù)一防止重復(fù)訪問(wèn)。采用遞推格式遍歷訪問(wèn)*/void visitIsland(char **gird, int row, int col, int rowSize, int colSize) {if (row < 0 || row >= rowSize || col < 0 || col >= colSize)return ;else if (gird[row][col] == '1'){gird[row][col] = '0';//上visitIsland(gird, row - 1, col, rowSize, colSize);//下visitIsland(gird, row + 1, col, rowSize, colSize);//左visitIsland(gird, row, col - 1, rowSize, colSize);//右visitIsland(gird, row, col + 1, rowSize, colSize);} }int numIslands(char** grid, int gridSize, int* gridColSize){int i, j, c = 0;if (!grid || gridSize == 0 || *gridColSize == 0)return c;for (i = 0; i < gridSize; i++){for (j = 0; j < *gridColSize; j++)if (grid[i][j] == '1'){visitIsland(grid, i, j, gridSize, *gridColSize);c++;}}return c; }?
=============================================================================================
Linux應(yīng)用程序、內(nèi)核、驅(qū)動(dòng)開發(fā)交流討論群(745510310),感興趣的同學(xué)可以加群討論、交流、資料查找等,前進(jìn)的道路上,你不是一個(gè)人奧^_^。
總結(jié)
以上是生活随笔為你收集整理的leetcode 200.岛屿数量 c代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: leetcode 752. 打开转盘锁
- 下一篇: 蚊子有内脏吗