日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[LUOGU]P1451 求细胞数量

發(fā)布時(shí)間:2025/3/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [LUOGU]P1451 求细胞数量 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述

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

輸入輸出格式

輸入格式: 輸入:整數(shù)m,n(m行,n列)

矩陣

輸出格式: 輸出:細(xì)胞的個(gè)數(shù)

輸入輸出樣例

輸入樣例#1:4 10
0234500067
1034560500
2045600671
0000000089
輸出樣例#1: 4

dfs每個(gè)非0且未訪問的數(shù)字。

#include<iostream> #include<string> #define MAXN 200 using namespace std;int a[MAXN][MAXN]; int m,n; bool vis[MAXN][MAXN]; int ans;inline bool pd(int x,int y) {if(x<=m&&x>0&&y<=n&&y>0) return true;return false; }void dfs(int x,int y) {if(vis[x][y]||a[x][y]==0) return;a[x][y]=-1;vis[x][y]=1;if(pd(x+1,y)) dfs(x+1,y);if(pd(x-1,y)) dfs(x-1,y);if(pd(x,y+1)) dfs(x,y+1);if(pd(x,y-1)) dfs(x,y-1);return; }int calc() {int i,j;int cnt=0;for(i=1; i<=m; i++) {for(j=1; j<=n; j++) {if(a[i][j]==-1) {a[i][j]=0;cnt++;}}}return cnt; }void show(){for(int i=1; i<=m; i++) {for(int j=1; j<=n; j++) {cout<<a[i][j]<<" ";}cout<<endl;}cout<<endl; }int main() {int i,j;cin>>m>>n;string s;for(i=1; i<=m; i++) {cin>>s;for(j=0; j<n ; j++) {a[i][j+1]=s[j]-'0';}}for(i=1; i<=m; i++) {for(j=1; j<=n; j++) {if(!vis[i][j]&&a[i][j]!=0) {dfs(i,j); // show();int re=calc();if(re>0) ans++;}}}cout<<ans;return 0; }

和swim很像。。恩

寬搜版:

#include<iostream> #include<queue> #include<string> #define MAXN 200 using namespace std;int n,m; int a[MAXN][MAXN]; int cnt; bool vis[MAXN][MAXN]; int mx[4]= {1,0,-1,0}; int my[4]= {0,1,0,-1};struct point {int x,y; } node,r;void bfs(int x,int y) {a[x][y]=0;vis[x][y]=1;queue<point> Q;node.x = x;node.y = y;Q.push(node);while(!Q.empty() ) {r=Q.front() ;Q.pop();for(int i=0; i<=3; i++) {int nx=r.x + mx[i],ny=r.y + my[i];if(nx>0&&nx<=m&&ny>0&&ny<=n&&a[nx][ny]!=0&&!vis[nx][ny]) {a[nx][ny]=0;vis[nx][ny]=1;node.x = nx;node.y = ny;Q.push(node); }}} }void show(){for(int i=1; i<=m; i++) {for(int j=1; j<=n; j++) {cout<<a[i][j]<<" ";}cout<<endl;}cout<<endl; } int main() {string s;cin>>m>>n;int i,j;for(i=1; i<=m; i++) {cin>>s;for(j=0; j<n; j++) {a[i][j+1]=s[j]-'0';}}for(i=1; i<=m; i++) {for(j=1; j<=n; j++) {if(a[i][j]!=0) {bfs(i,j);cnt++;}}}cout<<cnt;}

轉(zhuǎn)載于:https://www.cnblogs.com/ghostcai/p/9247551.html

總結(jié)

以上是生活随笔為你收集整理的[LUOGU]P1451 求细胞数量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。