千家信息网

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

发表于:2024-10-20 作者:千家信息网编辑
千家信息网最后更新 2024年10月20日,这篇文章主要介绍如何使用C++实现马踏棋盘,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!马踏棋盘,用1枚马走遍棋盘。我用一个二维数组记录模拟的整个路径,x为列,y为行,以顺时针
千家信息网最后更新 2024年10月20日如何使用C++实现马踏棋盘

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

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

#include#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=0&&chess[*y-2][*x+1]==0){                *x+=1;                *y-=2;                return 1;            }            break;        case 1:            if(*x+2=0&&chess[*y-1][*x+2]==0){                *x+=2;                *y-=1;                return 1;            }            break;        case 2:            if(*x+2=0&&*y+2=0&&*y+1=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

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

0