以上情况出现在函数内
#include <iostream>
using namespace std;
int b[35][35],step=-1,ms;
int m,n,s1,s2,e1,e2,i,j;
char a[35][35];
void find(int x,int y)
{
step++;
if(b[x][y]>step||b[x][y]==0)
{
b[x][y]=step;
int ms;
把int ms改为ms=0就不对,为什么
ms=step;
if(a[x-1][y]!='X' && x!=1) find(x-1,y);
step=ms;
if(a[x][y+1]!='X' && y!=n) find(x,y+1);
step=ms;
if(a[x][y-1]!='X' && y!=1) find(x,y-1);
step=ms;
if(a[x+1][y]!='X' && x!=m) find(x+1,y);
step=ms;
}
else
return;
}
int main()
{
cin>>m>>n;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
cin>>s1>>s2>>e1>>e2;
find(s1,s2);
cout <<b[e1][e2];
return 0;
}
您看一下我补充的题目。谢谢
追答你这个是全局变量和局部变量的区别,如果你不在函数里面定义int ms的话,你对ms的所有操作是对全局变量的操作(包括赋值,及其他的操作),而且只要程序不结束,你的每次改变的数据,将保留在这个全局变量里面
如果你想在函数内部定义以及局部变量ms这样的话,这个ms只在函数里面起作用,而且,它随着函数的消失而消失,不会保存数据,并且这个局部变量屏蔽全局变量,全局变量起不到作用,
这个要看你想怎么用啊,你如果想保存数据,就用全局的饿,不想保留的话,用局部的,不过,为了防止混淆,你如果不想保留数据时,建议你换一个局部变量
你的注释那个地方我试了,换成ms=0是可以的,况且这种情况咱经常用,绝对没有语法错误,我是在vc6.0上运行的,要不你换个编译器试试
是没有语法错误,但是运行结果不一样
追答这就是你的程序其他地方或者算法设计有问题了,就不是这个问题了,你下去在调试调试,
不要怕调试,好的程序是调出来的不是写出来的