D74999.RookProblemLink999.AvailableCapturesforRookProblemAnalysis在国际象棋中,“车”可以水平或垂直移动任何格子。给定一个代表棋盘格的二维数组,大写字母代表白色方块,小写字母代表黑色方块。.代表空白网格。回白车只动一次,有多少种吃法。思路是先从二维数组中找到白色小车R。然后四个方向遍历。逐方向遍历时,遇到时跳过。并判断下一个格子。如果遇到相同的大写字母,当遇到自己的棋子时,停止遍历。如果遇到小写字母,则可吃棋子数+1,停止遍历。就这样遍历四个方向,最后返回可以吃掉的棋子个数。最终代码$row){$colNum=array_search('R',$row);如果($colNum!==false){中断;}}if($colNum===-1){返回0;}$可捕获=0;//找到后四方向查找for($j=$colNum-1;$j>=0;$j--){if($board[$rowNum][$j]=='.'){continue;}if(strtoupper($board[$rowNum][$j])==$board[$rowNum][$j]){中断;}if(strtolower($board[$rowNum][$j])==$board[$rowNum][$j]){$captureable++;休息;}}for($j=$colNum+1;$j<8;$j++){if($board[$rowNum][$j]=='.'){继续;}如果(strtoupper($board[$rowNum][$j])==$board[$rowNum][$j]){break;}if(strtolower($board[$rowNum][$j])==$board[$rowNum][$j]){$captureable++;休息;}}for($i=$rowNum+1;$i<8;$i++){if($board[$i][$colNum]=='.'){继续;}if(strtoupper($board[$i][$colNum])==$board[$i][$colNum]){中断;}if(strtolower($board[$i][$colNum])==$board[$i][$colNum]){$captureable++;休息;}}for($i=$rowNum-1;$i>=0;$i--){if($board[$i][$colNum]=='.'){继续;}if(strtoupper($board[$i][$colNum])==$board[$i][$colNum]){中断;}if(strtolower($board[$i][$colNum])==$board[$i][$colNum]){$captureable++;休息;}}返回$captureable;}}如果您觉得本文对您有用,欢迎用爱心集资
