publicclass 图的dfs_FloodFill {privatestaticchar[][] data ={"*@@*@".toCharArray(),"**@*@".toCharArray(),"****@".toCharArray(),"@@@*@".toCharArray(),"@@**@".toCharArray(),};//记录区块数privatestaticint cnt;//访问记录// private static int[][] vis = new int[data.length][data[0].length];privatestaticvoiddfs(int r,int c){// 设计出口//超出边界了if(r <0|| r >= data.length || c <0|| c >= data[0].length)return;//不是@if(data[r][c]=='*')return;//已经扫描过了,这是深度搜索必须考虑到的点// if (vis[r][c] == 1) return;//标记为已访问// vis[r][c] = 1;
data[r][c]='*';// 八个方向去探测,继续搜索dfs(r +1, c);dfs(r -1, c);dfs(r, c +1);dfs(r, c -1);dfs(r +1, c +1);dfs(r +1, c -1);dfs(r -1, c -1);dfs(r -1, c +1);}publicstaticvoidmain(String[] args){//遍历每个字符for(int i =0; i < data.length; i++){for(int j =0; j < data[0].length; j++){// if (vis[i][j] == 0 && data[i][j] == '@')//找到@就开始深搜,深搜的过程就是把@变为*的过程if(data[i][j]=='@'){dfs(i, j);//当深搜完成,说明当前字符所在的八连块全部被修改为*,应该块的计数+1,并寻找下一个@++cnt;}}}
System.out.println(cnt);}}