細胞個數題解(廣度優先搜尋)

來源:互聯網
上載者:User

標籤:printf   bfs   廣度   二維   col   std   細胞   ++   數字   

題目描述:

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

0234500067

1034560500

2045600671

0000000089

有四個細胞

輸入:

第一行輸入n和m(n,m<20)

第二行開始為該矩陣

輸出:

一共有的細胞個數。

範例輸入:

4 10

0234500067

1034560500

2045600671

0000000089

範例輸出:

4

本題可以利用廣度優先搜尋來做;

先用數組來儲存輸入的數字,雙重迴圈找到第一個細胞數字並以此為起點搜尋,

將搜尋到的細胞數字置為0,ans++;

下面看代碼講解:

#include<stdio.h>int cell[20][20],ans,m,n;//二維數組中的方向有點x,y座標大小確定 int x1[5]={0,1,0,-1,0},y1[5]={0,0,1,0,-1};//利用簡單數組表示方向,第一個0無意義;//兩個數組依次結合代表四個方向 void bfs(int x,int y){    int i;    for(i=1;i<=4;i++)//依次找到四個方向 if(x+x1[i]>0&&x+x1[i]<=n&&y+y1[i]>0&&y+y1[i]<=m/*排除越界的可能*/    &&cell[x+x1[i]][y+y1[i]]!=0/*確認是否是細胞數字*/){cell[x+x1[i]][y+y1[i]]=0; //將找到細胞數字置為0防止重複 bfs(x+x1[i],y+y1[i]);//搜尋下一個點 }}int main(){    scanf("%d%d",&n,&m);    int i,j,k;    for(i=1;i<=n;i++)    for(j=1;j<=m;j++)      scanf("%1d",&cell[i][j]);//數字之間無空格,“%d”改為“%1d”即可 for(i=1;i<=n;i++)    for(j=1;j<=m;j++){    if(cell[i][j]!=0){    cell[i][j]=0;//千萬不能漏 bfs(i,j);    ans++;         }    }    printf("%d",ans);}

 

細胞個數題解(廣度優先搜尋)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.