題目描述:
現在有乙個僅包含『x』和『o』的二維板,請捕獲所有的被『x』包圍的區域
捕獲乙個被包圍區域的方法是將被包圍區域中的所有『o』變成『x』
例如 :
x x x x↵x o o x↵x x o x↵x o x x
執行完你給出的函式以後,這個二維板應該變成:
x x x x↵x x x x↵x x x x↵x o x x
分析:
給定二維陣列將陣列中所有被『x』包圍的』o』替換成』x』,沒有被包圍的則保留。陣列中的邊界位置的』o』一定不會被替換,因此與其連線到的』o』也不會被替換,所以應該先找到四個邊界上的』o』,並且找到與之相連線的』o』,將其都置為其他字元。
該題目類似於迷宮問題(回溯演算法)也就是遞迴演算法。(可以參考上矽谷的演算法與資料結構課中的遞迴講解之迷宮問題)
public
class
solution
brow=board.length;
//行數
bcol=board[0]
.length;
//列數
for(
int i=
0;i)for
(int i=
0;i)//替換的元素一定存在於非邊界的元素中因此遍歷中間的位置
for(
int i=
1;i1;i++)}
}//將元素中邊界以及其連線點的元素換回原來的'o'
for(
int i=
0;i}}
//自定義方法,對於邊界點為『o』的元素進行左右上下的回溯
public
void
reserve
(char
arr,
int row,
int col)
if(col>1)
if(row
if(col}}
}
附加迷宮問題的**:
public
class
migong
//左右置為1
for(
int i=
0;i<
8;i++
)//設定擋板
map[3]
[1]=
1;map[3]
[2]=
1;system.out.
println
("地圖情況為");
for(
int i=
0;i<
8;i++
) system.out.
println()
;}//找到解決的路
setway
(map,1,
1);//輸出地圖
system.out.
println
("小球走過的路");
for(
int i=
0;i<
8;i++
) system.out.
println()
;}}/*
* 1.map表示地圖,i,j表示小球的出發位置
* 2.若小球能夠到map[6][5]位置,能夠到達返回true
* 3.約定1是圍牆表示不能走,0表示該位置沒有走,2表示通路可以走,3表示該位置走過但走不通
* 4.確定乙個策略:先走哪個方向,規定:下----右-----上-----左,走不通再回溯
* */
public
static
boolean
setway
(int
map,
int i,
int j)
else
elseif(
setway
(map,i,j+1)
)elseif(
setway
(map,i-
1,j)
)elseif(
setway
(map,i,j-1)
)else
}else
}}
牛客網刷題
時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 立華奏在學習初中數學的時候遇到了這樣一道大水題 設箱子內有 n 個球,其中給 m 個球打上標記,設一次摸球摸到每乙個球的概率均等,求一次摸球摸到打標記的球的概率 e...
牛客網刷題
時間限制 c c 2秒,其他語言4秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 立華奏是乙個剛剛開始學習 oi 的萌新。最近,實力強大的 qingyu 當選了 iods 9102 的出題人。眾所周知,iods 是一場極其毒瘤的比賽。為了在這次...
牛客網刷題之窮舉
刷題記 第一次寫部落格,記錄日常生活的刷題,以後能夠複習使用。題目說明 對於給定的n個位於同一二維平面上的點,求最多能有多少個點位於同一直線上。分析 1.題目給的是二維空間的點,點包含有橫座標和縱座標資訊 2.根據兩點的斜率公式k y1 y2 x1 x2 得到 3.當點a與點b是同一點時,給相同點 ...