제목: 지도에는 m개의 행과 n개의 열이 있는 그리드가 있습니다. 로봇이 좌표(0,0)의 그리드에서 이동하기 시작합니다. 매번 이동할 수 있는 방향은 위, 아래, 왼쪽, 오른쪽입니다. 한 그리드만 이동할 수 있으며, 행 좌표와 열 좌표의 합이 K보다 큰 그리드에는 들어갈 수 없습니다. 예를 들어 K가 16일 때 로봇은 2+4+1+9=16이므로 정사각형(24,19)에 들어갈 수 있지만, 3+4+2+8= 17>16이므로 정사각형(34,28)에는 들어갈 수 없습니다. ,
Q: 이 로봇은 몇 개의 그리드에 도달할 수 있나요?
분석:
이 질문은 비교적 간단하며 4가지 부분으로 나눌 수 있습니다:
1) 숫자의 합을 계산하는 방법
2) 로봇이 특정 그리드에 들어갈 수 있는지 여부
3 ) 그리드에 들어갈 수 있으면 4개 동네의 그리드에 들어갈 수 있는지,
4) 통계는 총 여러 그리드에 도달할 수 있음
1) 코드
<code>//计算数字位数之和</code><code>int getDigitSum(int number)</code><code>{</code><code><br></code><code> int sum=0;//临时变量,保存一个数字数位和</code><code> </code><code> while(number){</code><code> </code><code> sum+=number%10;</code><code> number/=10;</code><code> } </code><code><br></code><code> return sum;</code><code><br></code><code>}</code>
2) 코드
<code>//机器人能否进入某个格子,即从三个方面考虑:</code><code>//①是否越界,②数位之和是否满足条件,③邻域格子是否已经访问过</code><code>bool check(int threshold,int rows,int cols,int row,int col,bool* visit){</code><code><br></code><code> if(row>=0&&col>=0&&row<rows&&col<cols&&getDigitSum(row)+getDigitSum(col)<=threshold)</code><code> &&!visit[row*cols+col])</code><code> return true;</code><code> return false;</code><code><br></code><code>}</code>
3) 코드
<code>int movingCountCore(int threshold,int rows,int cols, int row,int col, bool *visited)</code><code>{</code><code><br></code><code> int count=0;</code><code> if(check(threshold,rows,cols,row,col,bool* visited))</code><code> {</code><code><br></code><code> visited[row*cols+col]=true;</code><code> count+=1+movingCountCore(threshold,rows,cols,row-1,col,visited)</code><code> +movingCountCore(threshold,rows,cols,row+1,col,visited)</code><code> +movingCountCore(threshold,rows,cols,row,col-1,visited)</code><code> +movingCountCore(threshold,rows,cols,row,col+1,visited);</code><code> }</code><code> return count;</code><code><br></code><code>}</code>
4) 코드
int movingCount(int threshold,int rows,int cols){ //要考虑负值的情况 if(threshold<0||rows<=0||cols<=0) {return 0;} bool* visited=new bool[rows*cols]; for(int i=0;i<=rows*cols;++i){ visited=false; } int count=movingCountCore(threshold,rows,cols,0,0,visited); delete[] visited; return count;}
위 내용은 Java에서 로봇이 그리드 위를 걷는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!