Dev C++编译成功后运行显示“程序已停止工作”,求解!

马拦过河卒棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点... 马拦过河卒
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过15的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。
【输入】
一行四个数据,分别表示B点坐标和马的坐标。
【输出】
一个数据,表示所有的路径条数。
【样例】
knight.in knight.out
6 6 3 3 6
#include<iostream>
using namespace std;
const int dx[8]={1,2,2,1,-1,-2,-2,-1};
const int dy[8]={2,1,-1,-2,-2,-1,1,2};
const int cx[2]={1,0};
const int cy[2]={0,1};
void dfs(int i);
void print (int i);
int n,m,a,b,i,x[15],y[15];
int mx[15],my[15];
int main(){
cin>>n>>m;
cin>>a>>b;

for(int j=1;j<=8;++j)
{mx[j]=a+mx[j];
my[j]=b+my[j];
}
x[1]=0;y[1]=0;
dfs(1);
cout<<i<<endl;
return 0;
}
void dfs(int i){
if(x[i]==n&&y[i]==m)
print(i);
for(int j=0;j<2;++j)
{
if(x[i]+cx[j]>=0&&x[i]+cx[j]<=n&&y[i]+cy[j]>=0&&y[i]+cy[j<=m])
{
x[i+1]=x[i]+cx[j];
y[i+1]=y[i]+cy[j];
dfs(i+1);
}

}
}
void print(int i){
for(int j=1;j<=i;++j) cout<<"("<<x[j]<<","<<y[j]<<")";
cout<<endl;
}
展开
 我来答
panhezhong
2014-08-04 · TA获得超过622个赞
知道答主
回答量:155
采纳率:0%
帮助的人:88万
展开全部
for(int j=1;j<=8;++j)
{mx[j]=a+mx[j];
my[j]=b+my[j];
}
下标应该是从0到7
所以正确的代码应该是
for(int j=0;j<8;++j)
{
mx[j]=a+mx[j];
my[j]=b+my[j];
}
追问
但是我改完以后还是停止工作呀
追答
!!!
好吧还有一个问题
void dfs(int i){
if(x[i]==n&&y[i]==m)
print(i);
for(int j=0;j=0&&x[i]+cx[j]=0&&y[i]+cy[j>n>>m;
cin>>a>>b;

for(int j=1;j<=8;++j)
{mx[j]=a+mx[j];
my[j]=b+my[j];
}
x[1]=0;y[1]=0;
/*在这里加入cout<<"haha\n";如果显示了haha,则代表前面没有问题,如果没有显示就停止运行代表前面有问题*/
dfs(1);
cout<<i<<endl;//如果前面显示了haha但是这里没有显示i代表程序在dfs中崩溃
return 0;
}
需要学会一些诸如此类的调试方法来找出你程序的问题。或者你可以在dfs函数中加入一句cout<<i<<" ";如果显示超过了15则数组越界,这样可以检测
不过目前比较常见的停止运行的可能,主要是数组越界、递归层数过多,你从这两个原因之中找一个来验证,当然可能两个都有,自己调试吧
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiangsanhuo
2014-08-04 · TA获得超过169个赞
知道小有建树答主
回答量:291
采纳率:81%
帮助的人:174万
展开全部
数组下表是从0开始到n-1, 你的数组访问都越界了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式