細胞問題(廣度優先搜尋)

2021-07-11 01:56:56 字數 2276 閱讀 4714

description

一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。如:陣列 

0234500067 

1034560500 

2045600671 

0000000089 

有4個細胞。

input

輸入共m+1行第一行有兩個資料,分別表示總行數和總列數以下的m行,每行有n個0-9之間的數

output

細胞個數

sample input

4

0234500067

1034560500

2045600671

0000000089

sample output

4

解題思路:

先將矩陣中的每乙個數逐個掃瞄每乙個元素,當遇到乙個細胞就統計並進行廣搜,將所有能搜到的細胞覆蓋為

0,最後輸出細胞總數即可。

掛**:
const
dx:array[1..4]of -1..1=(-1,0,1,0);
dy:array[1..4]of -1..1=(0,1,0,-1);
var
name,s:string;
pic:array[1..50,1..79]of longint;
bz:array[1..50,1..79]of boolean;
m,n,i,j,num:longint;
h:array[1..4000,1..2]of longint;

procedure doing(p,q:longint);
var

i,t,w,x,y:longint;

begin

inc(num);

bz[p,q]:=false;

t:=1;

w:=1;

h[1,1]:=p;

h[1,2]:=q;

repeat

for i:=1 to 4 do

begin

x:=h[t,1]+dx[i];

y:=h[t,2]+dy[i];

if (x>0) and (x<=m) and (y>0) and (y<=n) and bz[x,y] then

begin

inc(w);

h[w,1]:=x;

h[w,2]:=y;

bz[x,y]:=false;

end;

end;

inc(t);

until t>w;

end;

begin
fillchar(bz,sizeof(bz),true);
num:=0;
readln(m,n);
for i:=1 to m do

begin

readln(s);

for j:=1 to n do

begin

pic[i,j]:=ord(s[j])-ord('0');

if pic[i,j]=0 then bz[i,j]:=false;

end;

end;

for i:=1 to m do

for j:=1 to n do

if bz[i,j] then doing(i,j);

writeln(num);
end.

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...

廣度優先搜尋

include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...

廣度優先搜尋

廣度優先搜尋詳解 1.也稱寬度優先搜尋,顧名思義,就是將一棵樹一層一層往下搜。演算法首先搜尋和s距離為k的所有頂點,然後再去搜尋和s距離為k l的其他頂點。bfs是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...