1 条题解
-
0
C++ :
#include<bits/stdc++.h>//偷懒专用库 #define ll long long #define INF 110 #define MAXN 99999//宏定义 using namespace std; inline int read(){ char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; }//快读,可以提供借鉴 int n,m,ans;//行,列,答案 char a[INF][INF];//存图 int f[12][2]={{2,0},{-2,0},{0,2},{0,-2},{1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};//这就是找点的数组,画个图就出来了,按照题目给的 void dfs(int x,int y)//搜索喽 { a[x][y]='-';//直接把能到的变成 '-' for(int p=0;p<12;++p)//一共可以到十二个点,数组也刚好开到11; { int dx=x+f[p][0];//扩展到的点的横坐标 int dy=y+f[p][1];//扩展到的点的纵坐标 if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&a[dx][dy]=='#')//满足条件,没超界, 并且是 '#'就搜他 dfs(dx,dy);//搜他 } } int main()//主函数 { n=read(); m=read();//读入 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]=='#')//搜到一个图案 { dfs(i,j);//把这个图变成 '-' ans++;//答案加一 ; } } cout<<ans;//输出 return 0;//养成好习惯从你我做起 }
- 1
信息
- ID
- 2786
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者