| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1436 人关注过本帖
标题:马的走法问题
只看楼主 加入收藏
shuihan
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-9-22
收藏
 问题点数:0 回复次数:4 
马的走法问题
中国象棋中,把马放在任意位置,能够把棋盘无重复的走完。我菜鸟,能不能给小弟一个思路?再线等。
搜索更多相关主题的帖子: 走法 
2007-12-20 11:06
zkkpkk
Rank: 2
等 级:论坛游民
威 望:5
帖 子:489
专家分:28
注 册:2006-6-17
收藏
得分:0 
不是这样问吧,我听说是走回来原点的N种走法。
8*8数组模拟棋盘,每步判断可跳点,死了就回朔

[[italic] 本帖最后由 zkkpkk 于 2007-12-22 22:50 编辑 [/italic]]

Viva,espana!
2007-12-22 22:45
三月里de小雨
Rank: 1
等 级:新手上路
帖 子:76
专家分:0
注 册:2007-10-2
收藏
得分:0 
比较复杂~

请问小雨谁带我追寻
追寻那一颗爱我的心
2007-12-24 20:56
shuihan
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-9-22
收藏
得分:0 
中国象棋是9*11格呀
不是 迷宫 或国际棋盘
2007-12-25 21:04
lsnaimei
Rank: 2
等 级:论坛游民
帖 子:25
专家分:47
注 册:2012-3-30
收藏
得分:0 
#include <stdio.h>
#include <malloc.h>
#define   N   8
#define   TRUE   1
#define   FALSE   0

int   HTry1[]={-2,-1,1,2,2,1,-1,-2};
int   HTry2[]={1,2,2,1,-1,-2,-2,-1};
int   map[N][N]={0};     //使用数组map表示8*8的棋盘
int   board[N*N]={0};   //使用数组board表示马每次走的方向
int   count=0;

typedef   struct   Position
{
int   x;
int   y;
struct   Position   *next;
}StackNode,*StackList;

void   InitStack(StackList   *horse)
{
*horse=(StackList)malloc(sizeof(StackNode));
(*horse)-> next=NULL;
}

int   Push(StackList   horse,int   x,int   y)
{
StackNode   *temp;
temp=(StackList)malloc(sizeof(StackNode));
if(temp==NULL)
return   FALSE;
temp-> x=x;
temp-> y=y;
temp-> next=horse-> next;
horse-> next=horse;
return   TRUE;
}

int   Pop(StackList   horse,int   *x,int   *y)
{
StackNode   *temp;
temp=horse-> next;
if(temp==NULL)
return   FALSE;
else
{
*x=temp-> x;
*y=temp-> y;
horse-> next=temp-> next;
free(temp);
return   TRUE;
}
}

int   CanJump(int   i,int   j)
{
if(i> =0&&i <8&&j> =0&&j <8&&map[i][j]==0)
return   TRUE;
return   FALSE;
}   //判断map[i][j]是否可以走

void   HorseTravel(StackList   horse,int   x,int   y)
{
int   i,j,start=0;

Push(horse,x,y);
map[x][y]=count+1;

while(count!=64)
{
i=x;
j=y;

for(start=board[count];start <8;start++)
{
i+=HTry1[start];
j+=HTry2[start];
if(CanJump(i,j))
break;
i-=HTry1[start];
j-=HTry2[start];
}   //   依照次序,八个方向挨个试探是否可以走

if(start <8)     //此时8个方向重有一个可以走
{
board[count]=start;     //将马选择走的方向保存在数组board中
map[i][j]=++count+1;   //将马选择走到的点的map改为走的顺序
printf( "%d   %d   \n ",i,j);   //方便查看,打印走的点的坐标
                                                        Push(horse,i,j);   //将马选择走到的点压栈
x=i;
y=j;
}
else   //此时8个方向都无法走
{
map[i][j]=0;   //将当前无法继续走的点的map设置为0,表示没有走过,以后可以选择走
Pop(horse,&i,&j);     //将当前的马的位置出栈
i=horse-> x;     //   让i为无法继续走的位置的前一个位置的x
j=horse-> y;     //让j为无法继续走的位置的前一个位置的y
board[count]++;   //让反悔走的点的方向加1
}
}
}


void   PrintMap()
{
int   i,j;
for(i=0;i <N;i++)
{
for(j=0;i <N;i++)
printf( "%d   ",map[i][j]);
printf( "\n ");
}
}

int   main()
{
int   x,y;
StackList   horse;

InitStack(&horse);
printf( "请输入起始位置(0-7): ");
scanf( "%d%d ",&x,&y);

HorseTravel(horse,x,y);
PrintMap();

getch();
return   0;
}
2012-03-30 16:18
快速回复:马的走法问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014543 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved