马踏棋盘算法2018-06-09

/June 8,2018 Author GH /
/
该代码用递归实现了马踏棋盘算法
/
/反思,在实现过程中滥用全局变量导致了许多fatal的错误!/
/此外代码的算法效率还有待改进——————可以将回退的代码进行重构 Line62~110/

include <stdio.h>

include <stdlib.h>

int move_x_array[8] = {1,2,2,1,-1,-2,-2,-1}; //x方向移动步骤 (x>0向下,x<0向上)
int move_y_array[8] = {2,1,-1,-2,-2,-1,1,2}; //y方向的移动步骤(y>0向右, y<0向左)
int L,C;
int Whether_passing[8][8] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}; //标志位,0表示没有走过,1表示已经走过;

int Cheese_value[8][8] = {{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}; //记录每一个位置是在 "第几部" 走过的;
int key; //Find_next()的返回值
int Kind = 0,layer = 0; //Kind是合格方案个数,layer当前所递归的层数;
void printf_cheese(void) //目的是判断是否棋盘上所有位置都被走过,如果没有则跳过,否则将当前情况打印出来
{
int line,column;
for(line=0;line<8;line++)
{
for(column=0;column<8;column++)
{
if(Cheese_value[line][column]<10) //使输出更加规整,列之间对齐;
{
printf("%d ",Cheese_value[line][column]);
}
else
{
printf("%d ",Cheese_value[line][column]);
}
}
printf("\n\n");
}
//printf("%d",move_y_array[4]);
}
int Find_next(int move_x,int move_y) //核心函数
{
int inner_counter =0,i; //inner_counter用于判断该位置是否已经无路可走,
int Adds_value = 0,mid_variable =0; //mid_variable用于判断是否需要回退一层,Adds_value用于计算总和;
layer++; //递归层数
if(move_x<0 || move_x>7 || move_y<0 || move_y>7) //判断位置是否在棋盘内
{
layer--;
return 0;
}
else if(Whether_passing[move_x][move_y]==1) //判断 是否已经走过
{
layer--;
return 0;
}
else
{
Cheese_value[move_x][move_y] = layer; //把当前步骤 赋值给Cheese_value数组;
Whether_passing[move_x][move_y] = 1; //标记 为已经走过
for(i=0;i<8;i++)
{
key = Find_next(move_x+move_x_array[i],move_y+move_y_array[i]);
if(key == 0)
{
inner_counter++;
}
} //递归
for(L=0;L<8;L++)
{
for(C=0;C<8;C++)
{
Adds_value += Cheese_value[L][C];
}
} //获取当前所有位置的值的总和;
if(inner_counter == 8) //回退一层
{
layer--;
}
if(inner_counter == 8 && Adds_value==2080 )// && && Adds_value < 2080
{
//inner_counter = 0;
Kind++;
printf("Kind=%d ###layer=%d ###Add_value= %d\n",Kind,layer+1,Adds_value); //总的种类数量
printf_cheese(); //伪代码,执行操作operator ,目的是判断是否棋盘上所有位置都被走过,如果没有则跳过,否则将当前情况打印出来
printf("\n");
}
if(inner_counter == 8 && layer==0)
{
printf("Game over;");
exit(0);
}
mid_variable = inner_counter; //因为inner_counter不得不清零所已用mid_variable来存储它的值;
inner_counter = 0;
Cheese_value[move_x][move_y] = 0; //步骤清零
Whether_passing[move_x][move_y]=0; //标志位清零
if(mid_variable == 8){ //如果无路可走必须要返回0,不然后面程序将不会回退一层,即layer--;不会执行
mid_variable = 0;
return 0;
}
else
return 1;
}
}
int main()
{
int start_x = 7,start_y = 0; //起始位置
Find_next(start_x,start_y);
return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的 算法 题目:...
    Poison_19ce阅读 1,114评论 0 0
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,700评论 0 38
  • (一) 不知道大家都有没有这样的感受,和有些人在一起就是放不开,换一群人,换一种环境却能变得自在起来。 之前一直以...
    小维维_d991阅读 83评论 0 0
  • 特别关注: 蒙城巨力向两家贫困生爱心捐款8620元! 陆建军、张奎摄影报道: 7月21日上午8时30分,蒙城县巨力...
    庄周乙未豪客阅读 626评论 0 0
  • 小婴儿学走路是怎样的?不断跌倒,不断爬起,他从不会担心自己的能力就只有这些,害怕再次失败而变得消极,只想着怎么走起来。
    1点学堂阅读 216评论 0 0