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


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

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

#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++实现马踏棋盘”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注主机评测网行业资讯频道!


上一篇:Linux中swapoff命令有什么用

下一篇:Linux中screen命令有什么用


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器