这是我在洛谷上的第一篇题解!!!!!!!!
这个其实很简单的
我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见
#include<iostream> #include<cstdio> #include<cstring> #include<iomanip> #include<algorithm> using namespace std; char f[501][501];//霸气的开始潇洒自信 int js=0; int n=-1,m=-1; void ac(int x,int y) { if(x<0 || y<0 || x>n || y>m)//发现是边界就返回上一层 return;//边界 f[x][y]='*'; if(f[x+1][y+1]=='@'){ac(x+1,y+1);}//八个方向各个开始寻找 if(f[x-1][y-1]=='@'){ac(x-1,y-1);}//找到就继续从找的的开始找 if(f[x+1][y-1]=='@'){ac(x+1,y-1);} if(f[x-1][y+1]=='@'){ac(x-1,y+1);} if(f[x][y+1]=='@'){ac(x,y+1);} if(f[x][y-1]=='@'){ac(x,y-1);} if(f[x+1][y]=='@'){ac(x+1,y);} if(f[x-1][y]=='@'){ac(x-1,y);} } int main() { while(cin>>n>>m) { memset(f,0,sizeof(f));//因为不去定有多少组数所以用这个 js=0;//必须清零不然上一层的结果会影响现在的 if(n==0 && m==0)//结束条件 { return 0; } for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { cin>>f[i][j];//超级正常的输入 } } for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { if(f[i][j]=='@')//找到第一个就开始从这个开始找 { js++;//油区数量加一 ac(i,j); } } } cout<<js<<endl;//输出 } return 0;//完美的结束潇洒自信 }