練習 6 綠紋龍的森林遊記 DFS

2021-10-18 20:59:35 字數 2500 閱讀 9977

description

暑假來了,綠紋龍很高興。於是飄飄乎就來到了森林一日遊。可是他卻看到了很不和諧的一幕,一群獵人在森林裡圍捕小動物。森林可以看做是乙個10*10的方格,如下圖所示,1表示獵人,0表示小動物。

已知獵人保持不動,而小動物可以往上下左右任意方向逃脫(當然不能撞上獵人)。小動物可以逃出森林。但上圖背景色被標紅的那部分小動物將永遠無法逃脫獵人的魔爪。

input

乙個10*10的矩陣,描述森林中獵人和小動物分布的情況。保證每個點要麼為獵人,要麼為小動物。

output

乙個整數,表示不能逃脫獵人魔爪的小動物數量。

samples

input

0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 1 0 0 0

0 0 0 0 1 0 0 1 0 0

0 0 0 0 0 1 0 0 1 0

0 0 1 0 0 0 1 0 1 0

0 1 0 1 0 1 0 0 1 0

0 1 0 0 1 1 0 1 1 0

0 0 1 0 0 0 0 1 0 0

0 0 0 1 1 1 1 1 0 0

0 0 0 0 0 0 0 0 0 0

output

15source

石光中學 fcs2018基礎班day 6

#include

using

namespace std;

typedef

long

long ll;

int a[

100]

[100];

ll ans;

void

dfs(

int x,

int y)

return;}

intmain()

for(

int i=

1;i<=

10;i++

)for

(int j=

1;j<=

10;j++)if

(a[i]

[j]==0)

ans++

; cout<

return0;

}

說一下大體的思路:

首先從這個二維矩陣的四個角開始dfs(1,i); dfs(i,1); dfs(10,i); dfs(i,10);向裡面掃,函式主體很容易理解:

if(x>=1 && x<=10 &&y>=1 &&y<=10 &&!a[x][y])是為了確保我們一定是在這個二維矩陣內操作,不會越界,如果遇到1就會停止。(遇到1就會停止,換言之,1起到了保護他內部0不會被修改的作用),所以可以執行的位置一定是0並且不是1內部的0.

那麼我們就把這個位置a[x][y]=1;變成1,因為他對最後的結果沒有貢獻(結果是被1包圍的0的數量)

dfs(x+1,y); dfs(x-1,y); dfs(x,y+1); dfs(x,y-1);這裡我們只需要暴力搜尋每乙個可以走到的位置就可以了。

可能會有疑惑的地方是為什麼要在最開始加乙個for迴圈

for

(int i=

1;i<=

10;i++

)

那是因為可能會出現如下的情況(以5*5為例):

010

1001

0100

1010

0101

0011

10

在這種情況下,如果只是從四個角位置上開始掃,那麼中間的4個0很顯然是掃不到的,因為他們的周圍有1的保護。但是按照題意,這4個動物是在邊界位置的,也就是說這4個動物會逃跑,很顯然如果只是從四個角開始掃,是不符合題意的,不完整的。因此我們要在四條邊的每乙個點開始掃一遍,以確保答案的正確性(沒有動物在邊界)。

完成了以上的操作,沒有被1圍起來的0(沒有被獵人包圍的動物)全都被標記成了1,而被包圍的動物很顯然,由於1的保護,仍然是0.

我們最後只要再檢驗0的數量,就可以得到最終的答案。

for

(int i=

1;i<=

10;i++

)for

(int j=

1;j<=

10;j++)if

(a[i]

[j]==0)

ans++

;

以上只是鄙人的拙見,如果有錯誤、不足之處,還請指正。

RHEL6入門系列之一,Linux的來龍去脈

近幾年,作為開源專案的linux系統憑藉出色的穩定性和安全性,得到越來越多企業的青睞。對於有志於學習網路技術的同學們,除了windows server之外,linux也是一種必須要學習掌握的伺服器作業系統。下面就讓我們一起開始踏入linux的世界。對於大多數初學者,在開始學習 linux之前一般都會...

牛客小白月賽6 指紋鎖(set容器的騷操作)

ha實驗有一套非常嚴密的安全保障體系,在ha實驗基地的大門,有乙個指紋鎖。該指紋鎖的加密演算法會把乙個指紋轉化為乙個不超過1e7的數字,兩個指紋數值之差越小,就說明兩個指紋越相似,當兩個指紋的數值差 k時,這兩個指紋的持有者會被系統判定為同乙個人。現在有3種操作,共m個,操作1 add x,表示為指...

9 1練習題6 高興的津津 題解

題目出處 洛谷 p3984 題目描述 津津上高中了。她在自己的媽媽的魔鬼訓練下,成為了乙個神犇,每次參加一次oi比賽必拿au虐全場。每次她拿到乙個au後就很高興。假設津津不會因為其它事高興,並且她的高興會持續t天 包包含獲獎當天。就算在高興的時候再次拿到au,他的高興也只能維持包括這次拿獎之日起t天...