逃离大厦第80关与马踏棋盘
今天我在玩一款逃离大厦的解密游戏。在跨越了重重障碍来到了第八十关。这一关很有意思
每次点击都会直接冲到底,要求填满所有空白的地方。
本来很容易,但是很不幸,一旦点击了就不能修改,楼主于是想到了马踏棋盘,终于可以学以致用了于是毫不犹豫
上代码
#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;
}
最终经过代码运行终于通过了这一关。
附上楼主的马踏棋盘代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异