写个详细点的求助贴

xiexiejohn 2017-11-26 04:33:14
就是马踏棋盘 书上方向右转,初始从标是在3,4
位置,我现在跟踪到第26步左上角0,0处,发现无路可走,我知道此时应该退回到第25步再找剩下方向试试,但我不明白是当在第26步(0,0)此时表示8个方向都不能走(不是超出范围就是被占用),那不是后续步数同样也无法走到(0,0)处吗,那退回25步再找剩下方向有什么意思。
...全文
199 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiexiejohn 2017-11-28
  • 打赏
  • 举报
回复
//那麻烦看下这样与对不对 #include <iostream> #include <iomanip> bool me(int &,int ,int ,int [],int [],int [][8]); void outprint(int [][8]); using namespace std; int main() { int step=1; //步数 int vs[8]={1,2,2,1,-1,-2,-2,-1}; int hs[8]={2,1,-1,-2,-2,-1,1,2}; int board[8][8]={0}; //棋盘大小 int currow=1,curcol=1; //当前骑士坐标初始值 board[currow][curcol]=step; bool tmp=me(step,currow,curcol,vs,hs,board); if(tmp==true) cout<<"当前从标["<<currow<<","<<curcol<<"]可以进行周游"<<endl; else cout<<"当前从标["<<currow<<","<<curcol<<"]无法进行周游"<<endl; outprint(board); return 0; } bool me(int &step,int currow,int curcol,int vs[],int hs[],int board[][8]) { for(int i=0;i<8;++i) { int tmprow=currow+vs[i]; int tmpcol=curcol+hs[i]; if((tmprow>-1 && tmprow<8) && (tmpcol>-1 && tmpcol<8) && board[tmprow][tmpcol]==0 ) { step++; currow=currow+vs[i]; curcol=curcol+hs[i]; board[currow][curcol]=step; bool val=me(step,currow,curcol,vs,hs,board); if(step==64) return true; step--; board[currow][curcol]=0; currow=currow-vs[i];curcol=curcol-hs[i]; } } return false; } void outprint(int board[][8]) { for(int i=0;i<8;++i) { for(int j=0;j<8;++j) cout<<board[i][j]<<" "; cout<<endl; } }
CT8100 2017-11-27
  • 打赏
  • 举报
回复
如果退回25的话的确就走不到26,但是你这只是回退一步的情况呀,既然是深度遍历,那就要做好退回第一步的准备。
xiexiejohn 2017-11-26
  • 打赏
  • 举报
回复
在线等大神哈

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧