1. 程式人生 > >洛谷 P1451 求細胞數量

洛谷 P1451 求細胞數量

比較 () font char 陣列 很多 輸出格式 turn 解釋

題目鏈接

https://www.luogu.org/problemnew/show/P1451


題目描述

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


輸入輸出格式

輸入格式:

輸入:整數m,n(m行,n列的矩陣)

輸出格式:

輸出:細胞的個數


思路

看到很多大佬用搜索,但身為蒟蒻的我只會打暴力,琢磨著就做對了

一開始我沒有輸出(連零都沒有!),然後我就自閉了,有個同學說要有邊界條件的判斷,於是打上之後,還是不對,發現只需要判斷上下左右四個點,於是我又刪了另外四個點的判斷

然後身為蒟蒻的我就傻傻的通過啦!

雖然時間可能比較多,但是數據水呀!


代碼

#include<bits/stdc++.h>
//懶人專用頭文件不解釋
using namespace std;

int n,m;
char a[101][101];//
int ans=0;

void shensou(int x,int y) {
    //邊界條件判斷直接返回
    if(x<1||y<1||x>n||y>m) {
        return ;
    }
    //以下是四個點的判斷
    //只要不是0都變成0,然後繼續搜索
    if
(a[x][y+1]!=0) { a[x][y+1]=0; shensou(x,y+1); } if(a[x][y-1]!=0) { a[x][y-1]=0; shensou(x,y-1); } if(a[x+1][y]!=0) { a[x+1][y]=0; shensou(x+1,y); } if(a[x-1][y]!=0) { a[x-1][y]=0; shensou(x-1
,y); } } int main() { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { cin>>a[i][j]; //用字符數組輸入,因為沒有空格 } } for(int i=1; i<=n; i++) { for(int j=1; j<=m; j++) { if(a[i][j]!=0) { a[i][j]=0;//不是0就變成零 ans++; shensou(i,j); //目的是將所有這個細胞中的元素清零 //這樣就可以直接找下一個細胞的某個元素 } } } printf("%d",ans);//愉快輸出答案 return 0; }

洛谷 P1451 求細胞數量