C语言 最少步数(马走日)帮解下。。。

最少步数(马走日)Description在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“... 最少步数(马走日) Description 在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”。有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字。他的同桌平时喜欢下围棋,知道这件事后觉得很有趣,就想试一试,在一个(19*19)的围棋盘上任选两点A、B,A点放上黑子,B点放上白子,代表两匹马。棋子可以按“日”字走,也可以按“田”字走,俩人一个走黑马,一个走白马。谁用最少的步数走到左上角坐标为(1,1)的点时,谁获胜。现在他请你帮忙,给你A、B两点的坐标,想知道两个位置到(1,1)点的可能最少步数。Input 两行,每行一组坐标。 Output 两行数,分别为两个坐标到(1,1)的最少步数。Sample Input 12 16 18 10 Sample Output 8 9 展开
 我来答
匿名用户
推荐于2017-11-25
展开全部
你好哦楼主~
很高兴看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
对于你的问题我爱莫能助!
可能是你问的问题有些专业了,或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也会比较热心,能快点帮你解决问题。
快过年了,
最后祝您全家幸福健康快乐每一天!
吴思易
2017-11-25
知道答主
回答量:21
采纳率:0%
帮助的人:2.3万
展开全部
#include<stdio.h>
int a[101][101],b[7],c,d,e,a1[10001],a2[10001],a3[10001],z[12][2]={{2,2},{2,-2},{-2,2},{-2,-2},
{1,2},{-1,2},{1,-2},{-1,-2},
{2,1},{2,-1},{-2,1},{-2,-1}};
void bfs(){
a[0][0]=-1;
if(b[1]==1&&b[2]==1){
b[5]=0;
}
if(b[3]==1&&b[4]==1){
b[6]=0;
}
int head=0,tail=1;
a1[tail]=0;
a2[tail]=0;
a3[tail]=0;
while(head<tail){
head++;
int x=a1[head],y=a2[head];
for(int i=0;i<12;i++){
int xx=x+z[i][0],yy=y+z[i][1];
if(xx>=0&&xx<100&&yy>=0&&y<100&&a[xx][yy]==0){
tail++;
a1[tail]=xx;
a2[tail]=yy;
a3[tail]=a3[head]+1;
a[xx][yy]=a3[tail];
if(xx==b[1]-1&&yy==b[2]-1)b[5]=a3[tail];
if(xx==b[3]-1&&yy==b[4]-1)b[6]=a3[tail];
if(a[b[1]-1][b[2]-1]!=0&&a[b[3]-1][b[4]-1]!=0)return ;
}
}
}
}
int main(){
scanf("%d%d%d%d",&b[1],&b[2],&b[3],&b[4]);
bfs();
printf("%d\n%d",b[5],b[6]);
return 0;
}
用到的是广度优先搜索算法,希望能对你有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式