2.灌水 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/7938/learning/?problem_list_id=25&page=1
#include <iostream>
#include <algorithm>
using namespace std;
int ans=1;
int px[4]={-1,0,1,0};
int py[4]={0,-1,0,1};
char a[35][45];
void dfs(int x,int y)
{
for(int i=0;i<4;i++)
{
int p=x+px[i];
int q=y+py[i];
// if(a[p][q]!='0')continue; //第14到16行的作用 跟 17到21行的作用一样
// else a[p][q]='2',ans++;
// dfs(p,q);
if(a[p][q]=='0')
{
a[p][q]=2;
ans++;
dfs(p,q); //对于每个变成2的数都进行一次调用
}
}
}
int main()
{
for(int i=0;i<30;i++)scanf("%s",a[i]);//每一行是一个字符串,输入字符数组是不需要使用取地符
a[0][0]='2';//从0,0的位置开始,不一定要把第一行第一列全部赋值为2
dfs(0,0);
printf("%d",ans);
return 0;
}
以上代码是看过大佬写的代码之后,经过一定的理解之后写出的代码,写的过程中还是出现一些小问题,就是17到21行那一块,理解的还不是很透彻。
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
long long arr1[50][50];
long long count=0;
for(int i=1;i<=30;i++)
{
for(int j=1;j<=40;j++)
{
cin>>arr1[i][j];
}
}
cout<<endl;
arr1[1][1]=2;
int n=100;
while(n--)
{
for(int i=1;i<=30;i++)
{
for(int j=1;j<=40;j++)
{
if(arr1[i][j]==2)
{
if(arr1[i-1][j]==0)arr1[i-1][j]=2;
if(arr1[i+1][j]==0)arr1[i+1][j]=2;
if(arr1[i][j-1]==0)arr1[i][j-1]=2;
if(arr1[i][j+1]==0)arr1[i][j+1]=2;
}
}
}
}
for(int i=1;i<=30;i++)
{
for(int j=1;j<=40;j++)
{
if(arr1[i][j]==2)count++;
}
}
cout<<count;
return 0;
}
以上代码是在考场上想出的笨拙思路,但是没完成,后期再加工写出的代码。刚开始就是想着输入30行40列,但是由于审题不仔细再加上基础知识不牢固,导致输入时就出现了问题,题目中给出的数据是紧挨着的,不像平时数据输入是有空格的,所以就一直卡在这里,感觉自己写的代码没问题,但是输入的时候就没法输入。后来经过别人的提醒,发现了这个问题,但在当时我也没想出什么应对策略,导致最后没有提交。上面的代码实现其实是比较笨的,不值得大家学习,就单纯的记录一下自己当时对于这道题目的处理办法,显然是不明智的。