马的遍历问题

来源:互联网 发布:哈布斯堡家族知乎 编辑:程序博客网 时间:2024/04/29 20:05

最近在复习一些数据结构和经典算法

在写马的遍历问题时遇到了死循环,不知道问题出在哪里,下面是代码,请高手指点

//马的遍历
bool travelCells(int x,int y,vector<vector<int>>& cellsVV,vector<vector<int>>& passVV)
{
 static int hasPassed = 0;

 cellsVV[x][y] = 1;
 hasPassed++;

 if(64 == hasPassed)
  return true;
 
 int i,j;
 i = x - 1;
 j = y - 2;
 if (i>=0 && j>=0 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x - 2;
 j = y - 1;
 if (i>=0 && j>=0 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x - 2;
 j = y + 1;
 if (i>=0 && j<8 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x - 1;
 j = y + 2;
 if (i>=0 && j<8 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x + 1;
 j = y + 2;
 if (i<8 && j<8 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x + 2;
 j = y + 1;
 if (i<8 && j<8 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x + 2;
 j = y - 1;
 if (i<8 && j>=0 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 i = x + 1;
 j = y - 2;
 if (i<8 && j>=0 && cellsVV[i][j] == 0)
  passVV[x*8+y].push_back(i*8+j);
 
 while(!passVV[x*8+y].empty())
 {
  int newX = passVV[x*8+y][0]/8;
  int newY = passVV[x*8+y][0]%8;
  bool res = travelCells(newX,newY,cellsVV,passVV);
  if (!res)
  {
   passVV[x*8+y].erase(passVV[x*8+y].begin());
   cellsVV[newX][newY] = 0;
   hasPassed--;
  }
  else
   return true;
 }
 
 return false;
}

//测试函数

void autoTestPass()
{
 vector<vector<int>> cellsVV(8,vector<int>(8));
 vector<vector<int>> passVV(64);
 for (int i=0;i<8;i++)
 {
  for (int j=0;j<8;j++)
  {
   cout<<"起始x:"<<i<<"起始y:"<<j<<endl;
   bool res = travelCells(i,j,cellsVV,passVV);
   if (res)
   {
    vector<vector<int>>::const_iterator tmpIter = passVV.begin();
    while(tmpIter!=passVV.end())
    {
     if (!tmpIter->empty())
     {
      int nPass = *(tmpIter->begin());
      cout<<"x:"<<nPass/8<<" && "<<"y:"<<nPass%8<<endl;
     }
     tmpIter++;
    }
   }
   else
   {
    cout<<"没有找到遍历路径:(/n";
   }
  }
 }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 走工伤和走社保怎么办 公司在朝阳社保在海淀怎么办 公司没缴纳个税怎么办 报个税工资报少了怎么办 医院预约单丢了怎么办 肛瘘手术后太疼怎么办 低位保肛手术后吻合口瘘怎么办 做完痔疮手术后大便困难怎么办 20岁长痔疮了怎么办 孕妇痔疮痒的难受怎么办 痔疮术后伤口不愈合怎么办 剖腹产液化伤口长的慢怎么办 内痔斑痕怎么办了能消化 油条面和稀了怎么办 解脲支原体感染怀孕怎么办 怀孕了检查出解脲支原体感染怎么办 大便是黑色的要怎么办 大人直肠给药不好意思怎么办 肛周脓肿长肉芽怎么办 二岁宝宝有直肠息肉怎么办 87岁老人得直肠息肉怎么办 做b超查出囊肿怎么办 解大便时肛门痒怎么办 生完孩子肛门痒怎么办 把达克宁软膏摸到肛门怎么办 痔疮手术后肛门痒怎么办 便秘拉完屁股疼怎么办 屁股拉屎拉破了怎么办 6岁小朋友屁眼痒怎么办 孩子屁屁偶尔痒怎么办 1岁半宝宝屁眼痒怎么办 3岁宝宝肛门痒怎么办 得痔疮发烧了怎么办啊 痔疮手术后肚子胀气怎么办 乙肝引起的发烧头痛怎么办 肠癌手术后吃了会胃疼怎么办 来月经肛门坠痛怎么办 总想排便还有血怎么办 闻了别人的口臭怎么办 有内痔肛门经常不舒服怎么办 做完肠镜肛门疼怎么办