杭电1241 为什么是错误的。 应该怎么改。 http://acm.hdu.edu.cn/show...
发布网友
发布时间:2024-10-03 10:06
我来回答
共2个回答
热心网友
时间:2024-10-03 12:37
你的思路非常好!
只是代码风格不好,比如你把所有的变量都声明为全局变量。
如此,你每一个模块都共享全局变量,很危险!
比如下标i,函数ss对i的改动是全局影响的,使得递归返回后i不能按你所想的变化下去,当然就错了!
当然,该全局的就全局,比如m,n(声明为局部变量也可以,大不了传参嘛)。
我很郁闷你能写出这样的代码还会出现这样的错误……以后注意下代码风格啊。
#include<stdio.h>
char a[101][101];
int n,m;
int b[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
void ss(int x,int y);
int main()
{
int i,j,s;
while(scanf("%d%d",&n,&m)!=EOF && n && m)
{
s=0;
for(i=0;i<n;i++)
scanf("%s",a[i]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i][j]=='@')
{
s++;
a[i][j]='*';
ss(i,j);
}
}
}
printf("%d\n",s);
}
return 0;
}
void ss(int x,int y)
{
int i,p,q;
for(i=0;i<8;i++)
{
p = x+b[i][0];
q = y+b[i][1];
if(!(p >= 0 && q >= 0 && p < n && q < m))
continue;
if(a[p][q]=='@')
{
a[p][q]='*';
ss(p,q);
}
}
}
热心网友
时间:2024-10-03 12:37
英语不好。。。能给我解释解释题目什么意思吗