C++算法代碼——細胞問題

題目來自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1152php

     http://ybt.ssoier.cn:8088/problem_show.php?pid=1329ios

     https://www.luogu.com.cn/problem/P1451數組

題目描述

一矩形陣列由數字0到9組成,數字1到9表明細胞,細胞的定義爲沿細胞數字上下左右仍是細胞數字則爲同一細胞,求給定矩形陣列的細胞個數。

如:陣列

0234500067
1034560500
2045600671
0000000089  
有4個細胞


spa

輸入

第一行 :兩個數字M N (1<=M<=50 1<=N<80)表示該陣列有M行N列,從第2行到第M+1行 每行有連續的N個字符。

code

輸出

一行: 細胞個數。blog

樣例輸入

4 10
0234500067
1034560500
2045600671
0000000089

樣例輸出

4

做者分析:這道題是一道經典的DFS搜索的題目,使用DFS求連通塊,注意,洛谷的題目需改變數組的大小。
#include <iostream>
#include <cstring>
using namespace std;

int idx[51][81],m,n,ans = 0;
char a[51][81];

void dfs(int x,int y,int id){
    if (x < 0 || x >= m || y < 0 || y >= n) return;
    if (idx[x][y] > 0 || a[x][y] == '0') return;
    idx[x][y] = id;
   // 上下左右搜索 dfs(x
- 1,y,id); dfs(x + 1,y,id); dfs(x,y + 1,id); dfs(x,y - 1,id); } int main(){ memset(a,0,sizeof(a)); memset(idx,0,sizeof(idx)); cin >> m >> n; for (int i = 0;i < m;i++){ cin >> a[i]; } int cnt = 0; for (int i = 0;i < m;i++){ for (int j = 0;j < n;j++){ if (idx[i][j] == 0 && a[i][j] != '0'){ dfs(i,j,++cnt); } } } cout << cnt; return 0; }
相關文章
相關標籤/搜索