遞歸查找網格中的所有路徑

我正在寫一個小程序,在給定一些需要避免的墻的情況下,calculates--recursively--all路徑到網格上的(0,0)。網格看起來像這樣:

 . . . . . . . . . . .
 | . . | . . . . . . .
 . . | . . . . . . . .
 . . - - - . . - - - -
 . | . . . . . | . . .
 . . . . . | . | . . .
 . . . . . . - - . . .
 . - - - . . . | . . .
 . | . . . . . | . . .
 . | . . . . . . . . .
 . . . | . . . . . . O

你必須到達原點,而不要在你的路徑中增加到原點的距離。

我編寫了以下代碼來查找所有路徑:

int recursive_find_path(unsigned int x, unsigned int y, unsigned int distance, std::vector<std::vector<GRID_STATUS> > blocked_grid){
  //if(x>blocked_grid.size()-1 or y>blocked_grid[x].size()-1 or x<0 or y<0 or x+y > distance or blocked_grid[y][x] == GRID_BLOCKED or blocked_grid[y][x] == GRID_TRAVELLED)
  if(x>blocked_grid.size()-1 or y>blocked_grid[x].size()-1 or x<0 or y<0 or x+y<distance or blocked_grid[y][x] == GRID_BLOCKED){
    return 0;
  }
  if(blocked_grid[y][x] == GRID_TRAVELLED){
    return 0;
  }
  if(x==0 and y==0){
    return 1;
  }
  blocked_grid[y][x] = GRID_TRAVELLED; // set position to 'travelled' on to avoid infinite recursion
  return recursive_find_path(x-1,y, distance-1,blocked_grid)+recursive_find_path(x,y-1, distance-1, blocked_grid)+recursive_find_path(x+1,y, distance-1, blocked_grid);
}

注:GRID_TRAVLLED和GRID_BLOCKED是程序中其他地方定義的值,但本質上只是表示有一堵墻或該點已在上面移動的標記。

然而,當運行時,程序輸出有零路徑!誠然,我不確定有多少條路徑,但我至少可以數一數,所以它不可能是零。

有人知道這里出了什么問題嗎?

提前謝謝

edit

 . . . . . . . . . . . . . . . . . . .
 X . . X . . . . . . . . . . . . . . .
 . . X . . . . . . . . . . . . . . . .
 . . X X X . . X X X X . . . . . . . .
 . X . . . . . X . . . . . . . . . . .
 . . . . . X . X . . . . . . . . . . .
 . . . . . . X X . . . . . . . . . . .
 . X X X . . . X . . . . . . . . . . .
 . X . . . . . X . . . . . . . . . . .
 . X . . . . . . . . . . . . . . . . .
 . . . X . . . . . . . . . . . . . . .
 . . . . . . . . . . . . . . . . . . .
 . . . . . . . . . . . . . . . . . . .
 . . . . . . . . . . . . . . . . . . .
 . . . . . . . X . . . . X . . . . . .
 . . . . . . . X . . . . . X X X X X X
 . . . . . . . X . . . . . . . . . . .
 . . . . . . . X . . . . . . . . . . .
 . . . . . . . X . . . . . . . . . X S

使用這個網格,我得到一個無限循環。。。。更新代碼:

  if(x>blocked_grid.size()-1 or y>blocked_grid[x].size()-1 or x<0 or y<0 or blocked_grid[y][x] == GRID_BLOCKED){
    return 0;
  }
  if(x==0 and y==0){
    return 1;
  }
  return recursive_find_path(x-1,y,blocked_grid)+recursive_find_path(x,y-1, blocked_grid);
}

讓它靜置一段時間后,它確實返回540。我幾乎可以肯定,在這種情況下,不可能有540條路徑

? 最佳回答:

我注意到:

return recursive_find_path(x-1,y, distance-1,blocked_grid)+recursive_find_path(x,y-1, distance-1, blocked_grid)+recursive_find_path(x+1,y, distance-1, blocked_grid);

兩個點(x+1,y)和(x-1,y)不能都離原點更近,但是你要把(距離-1)傳遞給這兩個遞歸調用。這將導致許多路徑的距離最終等于-1,然后返回0,但在返回0之前,這些路徑將被標記為已行駛,盡管它們是本應防止行駛的虛假路徑。

應該只檢查靠近原點的路徑,即(x-1,y)和(x,y-1)

主站蜘蛛池模板: 嫩B人妻精品一区二区三区| 国产精品第一区揄拍| 久久se精品一区二区影院| 免费在线观看一区| 国模大尺度视频一区二区| 日本一区二区三区在线观看 | 日韩精品午夜视频一区二区三区| 色婷婷av一区二区三区仙踪林| 性盈盈影院免费视频观看在线一区| 日本精品视频一区二区三区| 国产激情一区二区三区 | 国产激情视频一区二区三区| 精品无人乱码一区二区三区| 一区二区免费国产在线观看| 精品一区二区三区东京热| 性色av闺蜜一区二区三区| 亚洲一区二区三区香蕉| 中文字幕无线码一区二区| jizz免费一区二区三区| 人妖在线精品一区二区三区| 免费萌白酱国产一区二区| 国语精品一区二区三区| 国产日产久久高清欧美一区| 国产日韩一区二区三免费高清| 韩国福利影视一区二区三区| 精品一区二区三区免费毛片| 亚洲综合无码一区二区| 一区二区三区免费视频播放器| 久久久老熟女一区二区三区| 国产成人久久精品麻豆一区| 亚洲av无码一区二区三区人妖| 精品aⅴ一区二区三区| 日本无卡码免费一区二区三区| 亚洲av不卡一区二区三区| 风流老熟女一区二区三区| 国产美女一区二区三区| 亚洲av无码不卡一区二区三区 | 一本大道东京热无码一区 | 日本一区精品久久久久影院| 国产在线一区二区视频| 亚洲影视一区二区|