**小白都能看得懂的题解**
解题方法:BFS和DFS(广度优先搜索和深度优先搜索)
题目描述:
eg:
1.BFS
//广度优先搜索
//c语言自造链队列
//链队列辅助
typedef struct quelist{
int r;
int c;
struct quelist *next;
}quelist;
//申请一个节点
void init(quelist **p,int r,int c){
(*p)=(quelist *)malloc(sizeof(quelist));
(*p)->r=r;
(*p)->c=c;
(*p)->next=NULL;
}
int numIslands(char** grid, int gridSize, int* gridColSize){
int row=gridSize;
int col=*gridColSize;
if(!row) return 0;
struct quelist *queleft=NULL,*queright=NULL;//分别指向队列的队头和队尾
int num_lands=0;//用于记录岛屿的个数
for(int i=0;i<row;++i){
for(int j=0;j<col;++j){
if(grid[i][j]=='1'){
++num_lands;
grid[i][j]='0';//已经访问过的标记为’0‘
init(&queright,i,j);//将这个方格入队;
queleft=queright;//每次都要初始化队头和队尾指针指向一个位置
//广度优先开始
while(queleft){
int rr=queleft->r;//rr是队头元素的行标,cc是队头元素的列标
int cc=queleft->c;
//下面才是真正开始广度优先搜索
if(rr-1>=0&&grid[rr-1][cc]=='1'){
grid[rr-1][cc]='0';
init(&(queright->next),rr-1,cc);
queright=queright->next;
}
if(rr+1<row&&grid[rr+1][cc]=='1'){
grid[rr+1][cc]='0';
init(&(queright->next),rr+1,cc);
queright=queright->next;
}
if(cc-1>=0&&grid[rr][cc-1]=='1'){
grid[rr][cc-1]='0';
init(&(queright->next),rr,cc-1);
queright=queright->next;
}
if(cc+1<col&&grid[rr][cc+1]=='1'){
grid[rr][cc+1]='0';
init(&(queright->next),rr,cc+1);
queright=queright->next;
}
queleft=queleft->next;//访问(i,j)元素的周围的元素后,开始周围的元素的广度优先搜索
}
}
}
}
return num_lands;
}
2.DFS
//尝试优先搜索
//系统栈
//递归的思想
void dfs(char **grid,int row,int col,int r,int c){
//递归
grid[r][c]='0';
if(r-1>=0&&grid[r-1][c]=='1') dfs(grid,row,col,r-1,c);
if(r+1<row&&grid[r+1][c]=='1') dfs(grid,row,col,r+1,c);
if(c-1>=0&&grid[r][c-1]=='1') dfs(grid,row,col,r,c-1);
if(c+1<col&&grid[r][c+1]=='1') dfs(grid,row,col,r,c+1);
}
int numIslands(char** grid, int gridSize, int* gridColSize){
int row=gridSize;
int col=*gridColSize;
if(!row) return 0;
int numLands=0;
for(int i=0;i<row;++i){
for(int j=0;j<col;++j){
if(grid[i][j]=='1'){
++numLands;
dfs(grid,row,col,i,j);
}
}
}
return numLands;
}
本文实例为大家分享了JS实现纸牌发牌动画的具体代码,供大家参考,具体内容如下 ...
无论是Windows还是macOS,都少不了各种小工具的加持。作为操作系统中必不可少的...
SQL可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据、建立...
在用java进行web业务开发的时候,对于页面上接收到的参数,除了极少数是步可预知...
display-namedefaultroot/display-name servlet servlet-namedebugjsp/servlet-n...
信号章节 -- 信号章节总体概要 信号基本概念 信号是异步事件,发送信号的线程可...
我们在用ajax请求数据时,可能会遇到一次点击多次触发的可能。 (比如说:ajax ...
在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地...
本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大...
MySQL 运维 - 从零开始学习 一、数据库类型 ? 常见的数据库类型 二、数据库管理...