逃离大厦第80关与马踏棋盘

简介: 逃离大厦第80关与马踏棋盘

今天我在玩一款逃离大厦的解密游戏。在跨越了重重障碍来到了第八十关。这一关很有意思



20150517023902192.pngimage.png


每次点击都会直接冲到底,要求填满所有空白的地方。

本来很容易,但是很不幸,一旦点击了就不能修改,楼主于是想到了马踏棋盘,终于可以学以致用了于是毫不犹豫

上代码

#include <stdio.h>
#include <stdlib.h>
#define N 5+2
typedef struct {
int a[N][N];
int lstep[4];
int rstep[4]; 
int cnt;
}Horse;
void Init(Horse *p)
{
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            p->a[i][j]=-1;
        }
    }
    for(i=1;i<N-1;i++){
        for(j=1;j<N-1;j++){
            p->a[i][j]=0;
        }
    }
    p->cnt=0;
    p->a[1][1]=p->a[2][3]=p->a[3][5]=p->a[5][4]=-1;
    p->lstep[0]=p->rstep[3]=-1;
    p->lstep[1]=p->lstep[3]=p->rstep[0]=p->rstep[2]=0;
    p->lstep[2]=p->rstep[1]=1;
}
void prin(Horse *p)
{
    int i,j;
    for(i=0;i<N;i++){
        for(j=0;j<N;j++){
            printf("%3d",p->a[i][j]);
        }
        putchar('\n');
    }
}
/*
   一共有21个空
   使用回溯思想
   从(1,1)--(5,5);
   每次转变方向必须冲到底 
*/
void function(int R,int C,Horse *p)
{
    int i;//控制方向
    int save;
    for(i=0;i<4;i++){
        if(p->a[R+p->lstep[i]][C+p->rstep[i]]==0){
            //冲到底
            save=p->cnt;
            while(p->a[R+p->lstep[i]][C+p->rstep[i]]==0){
                R=R+p->lstep[i];
                C=C+p->rstep[i];
                p->a[R][C]=++(p->cnt);
            }
            if(p->cnt<21){
                function(R,C,p);
            }else{
                prin(p);
            }
            //按照原方向退到低
            do{
                p->a[R][C]=0;
                p->cnt--;
                R=R-p->lstep[i];
                C=C-p->rstep[i];
            }while(save!=p->cnt);
        }
    }   
}
int main(void)
{
    Horse p;
    Init(&p);
    prin(&p);
    int i,j;
    int time=0;
    for(i=1;i<N-1;i++){
    for(j=1;j<N-1;j++){
    function(i,j,&p);
    printf("time=%d\n",time++);
    }
    }
    return 0;
}

20150517024722520.jpg


image.png


最终经过代码运行终于通过了这一关。

附上楼主的马踏棋盘代码


http://blog.csdn.net/btnode/article/details/42664805

相关文章
|
存储 人工智能 弹性计算
600天,我们在沙漠筑“城堡”
600天,我们在沙漠筑“城堡”
114 0
小猴打架
题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友。每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友。经过N-1次打架之后,整个森林的小猴都会成为好朋友。 现在的问题是,总共有多少种不同的打架过程。
138 0
小猴打架
杠上埃隆马斯克,这群中国年轻人造了一枚航天器,我们去现场看了看
提起“旅行者 2 号”,大多数人会联想到 NASA 于 1977 年发射的一枚无人星际航天器。它不辱使命的完成了一系列的太阳系“掠过”任务,目前正向着更为深邃的宇宙进发,预计在 2020 年结束自己的生命。 或许是为了致敬其卓越的航天贡献,被誉为中国“Space X”的光启也整捣出了自己的载人飞船,并同样将它命名为“旅行者”号。
336 0
杠上埃隆马斯克,这群中国年轻人造了一枚航天器,我们去现场看了看
|
人工智能 自然语言处理 算法
韩国VR公司8个月为母亲“重塑”女儿,可触碰、能对话,和去世女儿再吹一次蜡烛
韩国VR公司8个月为母亲“重塑”女儿,可触碰、能对话,和去世女儿再吹一次蜡烛
269 0
韩国VR公司8个月为母亲“重塑”女儿,可触碰、能对话,和去世女儿再吹一次蜡烛
|
Java C++
做决定,怎能让“自己”缺席
【来信】   贺老师,您好,我在一次有目的的搜索中发现了您给大二软件工程学生解答的问题。仔细阅读后,决定写信给您。
1391 0