題目:1009: 細胞
Description
一矩形陣列由數字0到9組成,數字1到9表明細胞。
細胞的定義爲沿細胞數字上下左右仍是細胞數字則爲同一細胞。
求給定矩形陣列的細胞個數。
如陣列
4 10
0234500067
1034560500
2045600671
0000000089
有4個細胞。
Input
第一行包含2個整數n和m,分別表示矩形陣列的行數和列數。
接下來的n行,每行m個數字,表明細胞的矩形陣列。
Output
輸出細胞的個數。
Sample Input
4 10
0234500067
1034560500
2045600671
0000000089
Sample Output
4函數
思路:這個題目的大致意思是輸入的細胞矩陣,只要是數字相鄰而且相連(且不能是0!),即爲一個細胞;
因此這個用dfs的方法,即每次排查的時候,找到若是不是0,則進入函數,先將這個位置給變成0,而後再排查其相鄰的全部範圍是否有非0項,有則將其變爲0(由於相鄰的話就算做一個細胞了);就這樣依次排查進行便可;code
代碼:ip
#include<stdio.h> void dfs(int ,int ); int t_x[]={0,-1,0,1}; int t_y[]={-1,0,1,0}; int n,m; char a[1000][1000]; int main() { int i,j,sum; while(scanf("%d%d",&n,&m)!=EOF){ sum=0; for(i=0;i<n;++i){ scanf("%s",a[i]); } for(i=0;i<n;++i){ for(j=0;j<m;++j) if(a[i][j]!='0'){ sum++; //printf("%d %d",i,j); dfs(i,j); //printf("%d %d",i,j); } } printf("%d\n",sum); } return 0; } void dfs(int x,int y) { int xx,yy; a[x][y]='0'; for(int i=0;i<4;++i){ xx=t_x[i]+x;yy=t_y[i]+y; if(xx<n&&xx>=0&&yy<m&&yy>=0) { if(a[xx][yy]!='0') dfs(xx,yy); } } }