牛客網刷題之陣列

2021-09-26 16:38:37 字數 2084 閱讀 3530

題目描述:

現在有乙個僅包含『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是同一點時,給相同點 ...