用C++(或C)语言 写个简单的程序 与象棋有关
这是题目Description棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的...
这是题目Description
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。
同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。
棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,注意过河卒不能进入对方马的控制点
Input
一行,4个整数n,m,x,y(m,n<=20),(x,y)表示马的坐标
Output
一行整数,为卒从A点能够到达B点的路径的条数
Sample Input
5 6 2 3
Sample Output
3
我的程序如下
#include<iostream>
using namespace std;
int n,m,num=0;
int horsectr(int xnow,int ynow,int x,int y)
{
if(((xnow==x+2)||(xnow==x-2))&&((ynow==y+1)||(ynow==y-1))||
((ynow==y+2)||(ynow==y-2))&&((xnow==x+1)||(xnow==x-1))||
((xnow==x)&&(ynow==y))) //??????????????????????????????
{
return 1;
}
return 0;
}
void find(int xx,int yy,int x,int y)
{
if((xx==n)&&(yy==m))
{
num++;
return ;//??????????????????????
}
if(horsectr(xx,yy,x,y))
{
return ; //????????????????????????????????????
}
if((xx>n)||(yy>m))
{
return ; //????????????????
}
find(xx+1,yy,x,y); //??????
find(xx,yy+1,x,y); //??????
}
int main()
{
int x,y;
cin>>n>>m>>x>>y;
find(0,0,x,y);
cout<<num<<endl;
return 0;
}
超时了(要求1000MS以内)...
请帮我写个符合要求的程序,并指出我的错误,谢谢 展开
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。
同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。
棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,注意过河卒不能进入对方马的控制点
Input
一行,4个整数n,m,x,y(m,n<=20),(x,y)表示马的坐标
Output
一行整数,为卒从A点能够到达B点的路径的条数
Sample Input
5 6 2 3
Sample Output
3
我的程序如下
#include<iostream>
using namespace std;
int n,m,num=0;
int horsectr(int xnow,int ynow,int x,int y)
{
if(((xnow==x+2)||(xnow==x-2))&&((ynow==y+1)||(ynow==y-1))||
((ynow==y+2)||(ynow==y-2))&&((xnow==x+1)||(xnow==x-1))||
((xnow==x)&&(ynow==y))) //??????????????????????????????
{
return 1;
}
return 0;
}
void find(int xx,int yy,int x,int y)
{
if((xx==n)&&(yy==m))
{
num++;
return ;//??????????????????????
}
if(horsectr(xx,yy,x,y))
{
return ; //????????????????????????????????????
}
if((xx>n)||(yy>m))
{
return ; //????????????????
}
find(xx+1,yy,x,y); //??????
find(xx,yy+1,x,y); //??????
}
int main()
{
int x,y;
cin>>n>>m>>x>>y;
find(0,0,x,y);
cout<<num<<endl;
return 0;
}
超时了(要求1000MS以内)...
请帮我写个符合要求的程序,并指出我的错误,谢谢 展开
1个回答
展开全部
建议你到www.csdn.net去提问 效果会好些
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询