標籤: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);}
細胞個數題解(廣度優先搜尋)