文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用C++实现马踏棋盘

2023-06-29 05:14

关注

这篇文章主要介绍如何使用C++实现马踏棋盘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

马踏棋盘,用1枚马走遍棋盘。我用一个二维数组记录模拟的整个路径,x为列,y为行,以顺时针的方式寻找下一格,算法比较简单,就通过递归和循环回溯即可,就是如果是8*8的数组,最坏可能执行8^(x*y)次,耗时长到怀疑人生。

如何使用C++实现马踏棋盘

#include<iostream>#define X 5#define Y 5 void ShowResult();using namespace std; int chess[Y][X]={    0};int counter=0; int Next(int* x,int* y,int where){     switch(where){        case 0:            if(*x+1<X&&*y-2>=0&&chess[*y-2][*x+1]==0){                *x+=1;                *y-=2;                return 1;            }            break;        case 1:            if(*x+2<X&&*y-1>=0&&chess[*y-1][*x+2]==0){                *x+=2;                *y-=1;                return 1;            }            break;        case 2:            if(*x+2<X&&*y+1<Y&&chess[*y+1][*x+2]==0){                *x+=2;                *y+=1;                return 1;            }            break;        case 3:            if(*x+1<X&&*y+2<Y&&chess[*y+2][*x+1]==0){                *x+=1;                *y+=2;                return 1;            }            break;        case 4:            if(*x-1>=0&&*y+2<Y&&chess[*y+2][*x-1]==0){                *x-=1;                *y+=2;                return 1;            }            break;        case 5:            if(*x-2>=0&&*y+1<Y&&chess[*y+1][*x-2]==0){                *x-=2;                *y+=1;                return 1;            }            break;        case 6:            if(*x-2>=0&&*y-1>=0&&chess[*y-1][*x-2]==0){                *x-=2;                *y-=1;                return 1;            }            break;        case 7:            if(*x-1>=0&&*y-2>=0&&chess[*y-2][*x-1]==0){                *x-=1;                *y-=2;                return 1;            }            break;    }    return 0;} int Explore(int x,int y){    int x1=x;    int y1=y;    int flag;    int where=0;         counter++;    chess[y][x]=counter;         if(counter==X*Y){        return 1;    }                flag=Next(&x1,&y1,where);    while(flag==0&&where<7){        where++;        flag=Next(&x1,&y1,where);    }            while(flag){        if(Explore(x1,y1)==1){            return 1;        }        else{            x1=x;            y1=y;            where++;            flag=Next(&x1,&y1,where);            while(flag==0&&where<7){                where++;                flag=Next(&x1,&y1,where);            }        }    }    if(flag==0){        chess[y][x]=0;        counter--;    }    return 0;} void ShowResult(){        for(int i=0;i<Y;i++){        for(int j=0;j<X;j++){            cout.width(4);            cout<<chess[i][j]<<' ';        }        cout<<endl;    }    cout<<endl;} int main(){    int start=clock();    int result=Explore(2,1);    int end=clock();    if(result){        ShowResult();            }    else{        cout<<"have no path!"<<endl;     }     cout<<"spend time:"<<(end-start)/CLOCKS_PER_SEC<<" s"<<endl;    return 0;}

以上是“如何使用C++实现马踏棋盘”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯