洛谷 P1451 求細胞數量
阿新 • • 發佈:2019-04-16
比較 () 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 求細胞數量