马跳棋盘问题!

hawkman2k 2002-10-26 12:03:01
在[8*8]的棋盘上,有一匹马随机放在棋盘上,按照马的斜日字走法,有什么
办法是吗不重复的走过棋盘所有的格子。

...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangxiwei 2002-10-28
  • 打赏
  • 举报
回复
//贪心法
//跳马问题
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>

#define ROW 8 //行数,可变
#define LINE 8 //列数,可变
#define NUM ROW*LINE //总格数

int board[ROW][LINE];

//两个数组存储对应的偏移量
int stepRow[8] = {-1,-2,-2,-1,1,2,2,1};
int stepLine[8] = {-2,-1,1,2,2,1,-1,-2};

//求 (i,j) 的出口数,各个出口对应的号存在 a[] 中。
//s 表示顺序选择法的开始
int exitn(int i ,int j ,int s ,int a[]){
int i1,j1,k,count;
for( count = k = 0 ; k < 8 ; k++ ){
i1 = i + stepRow[( s + k )% 8];
j1 = j + stepLine[( s + k )% 8];
if( i1 >= 0 && i1 < ROW && j1 >= 0 && j1 < LINE
&& board[i1][j1] == 0 ){
a[count++] = ( s + k )% 8;
}
}
return count;
}

//判断选择下个出口,s 是顺序选择法的开始序号
int next(int i ,int j ,int s){
int m, kk,a[8] ,b[8] ,temp;
m = exitn( i ,j ,s ,a);
if( m == 0 ) return -1; //没有出口的情况
for(int min = 9 , k = 0 ; k < m ; k++ ){ //逐个考虑取下一步最少的出口的出口
temp = exitn( i+stepRow[a[k]] , j+stepLine[a[k]] , s , b);
if( temp < min ){
min = temp ;
kk = a[k];
}
}
return kk;
}

int main()
{
int i ,j , step ,no ,start ;

//对每个位置的点都进行计算得到各个点的结果
//如果只想算某一个点的,把循环去掉换上相应的赋值语句就可以了
for( int sx = 0 ; sx < ROW ; sx++ )
for( int sy = 0 ; sy < LINE ; sy++ ){
start = 0;
do{
for( i = 0 ; i < ROW ; i++ )
for( j = 0 ; j < LINE ; j++ )
board[i][j] = 0;
board[sx][sy] = 1;
i = sx; j = sy;
for(step = 2 ; step <= NUM ; step++ ){
if((no = next(i,j,start)) == -1)
break;
i += stepRow[no];
j += stepLine[no];
board[i][j] = step;
}
if( step > NUM || no == -1)
break;
start++;
}while( step <= NUM );
if( no != -1 ){
cout<<"任意键打印下个结果:"<<endl;
getch();
for( i = 0 ; i < ROW ; i++ ){
for( j = 0 ; j < LINE ; j++ )
cout<<setw(4)<<board[i][j]; //打印
cout<<endl;
}
}
}
return 0;
}
zhanvi 2002-10-27
  • 打赏
  • 举报
回复
回朔遍历
dcyu 2002-10-27
  • 打赏
  • 举报
回复
http://vip.6to23.com/dcyu/TurboC/algorithm/7.html
clane 2002-10-26
  • 打赏
  • 举报
回复
递归遍历。

19,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧