Surrounded-Regions
来源:互联网 发布:昆仑通态触摸屏软件 编辑:程序博客网 时间:2024/06/05 05:01
packagecom.ytx.array;
/**130题
* Given a 2D board containing'X'and'O', capture all regions surrounded by'X'.
A region is captured byflipping all'O's into'X's in that surrounded region .
For example,
X X X X
X O O X
X X O X
X O X X
After running your function, the board should be:
X X X X
X X X X
X X X X
X O X X
*
* 给你一块2维的包含'X'或者'O'的板,找到所有被'X'包围的区域, 把区域内的‘O‘翻转成’X’。
*@authoryuantian xin
*
*思路:连通性问题,用dfs和bfs都可以解决。逆向思维,求所有封闭的O,可以先求出所有连通的O,保存起来,再把其它的O改成X即可。只有在从边界上
*连通的O才不会被X封闭。所以从边界上四条边界上进行深搜或者广搜,找到所有连通的O。
*/
publicclass Surrounded_regions {
//二维矩阵的行数
publicint rowNum;
//二维矩阵的列数
publicint colNum;
/**
* 利用深搜从边界上开始找,找到所有与边界上O连通的所有O,
* 把所有连通的O变成*保存起来,那么剩下的O都是封闭的,被X包围的
*@param index_x 二维数组的索引行
*@param index_y 二维数据的索引列
*@param board 二维数据
*/
publicvoid dfs(intindex_x,int index_y, char board[][]) {
if(board[index_x][index_y] == 'O') {
//是O才继续往下找,把所有连通的O都变成*,之后再变回来
board[index_x][index_y] = '*';
//向上找
if(index_x> 1) {
dfs(index_x- 1,index_y,board);
}
//向下找
if(index_x< rowNum - 1) {
dfs(index_x+1,index_y,board);
}
//向左找
if(index_y> 1) {
dfs(index_x,index_y - 1, board);
}
//向右找
if(index_y< colNum -1) {
dfs(index_x,index_y + 1, board);
}
}
}
/**
* 解决的办法,找到所有与边界上的O连通的O,改成*,剩下的不连通的
* 改成X,最后把*变回O即可
*@param board
*/
publicvoid solve(char[][]board) {
if(board== null || board.length<= 0 || board[0].length<= 0) {
return;
}
rowNum= board.length;
colNum= board.length;
//从第0列和最后一列开始找,递归深搜
for(inti = 0; i < rowNum;i++) {
dfs(i,0,board);
dfs(i,colNum- 1, board);
}
//从第一行和最后一行开始找
for(intj = 0; j < colNum;j++) {
dfs(0,j,board);
dfs(rowNum- 1, j, board);
}
//遍历二维数组,剩下不连通的O全部变成X,把*变回O。
for(inti = 0; i < rowNum;i++) {
for(intj = 0; j < colNum;j++) {
if(board[i][j] == 'O') {
board[i][j] = 'X';
}
if(board[i][j] == '*') {
board[i][j] ='O';
}
}
}
}
publicstatic void main(String[]args) {
charboard [][] ={{'X','X','X','X'},{'X','O','O','X'},{'X','X','O','X'},{'X','O','X','X'}};
for(inti = 0; i < board.length;i++) {
for(intj = 0; j < board[0].length;j++) {
System.out.print(board[i][j] + " ");
}
System.out.println("");
}
System.out.println("---------");
Surrounded_regionssr = newSurrounded_regions();
sr.solve(board);
for(inti = 0; i < board.length;i++) {
for(intj = 0; j < board[0].length;j++) {
System.out.print(board[i][j] + " ");
}
System.out.println("");
}
}
}
阅读全文
0 0
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- Surrounded Regions
- 自制的轨迹球(鼠标)按键异常问题
- Spring MVC--11.文件上传
- Ubuntu云服务器搭建J2EE环境
- MySQL性能优化的最佳20+条经验
- Windows下Git基本操作
- Surrounded-Regions
- 软件开发应该具有人性化的特点
- Mongodb 系列
- 【EditText】关于EditText的一些坑
- HDU-1001 (基础题)
- Struts2和SpringMvc的区别(面试)
- 洛谷 P1080 国王游戏
- 教程-上传应用公钥并获取支付宝公钥
- 菜鸟解答:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException