> Java > java지도 시간 > 본문

Java에서 로봇이 그리드 위를 걷는 문제를 해결하는 방법

WBOY
풀어 주다: 2023-04-24 09:28:12
앞으로
1264명이 탐색했습니다.

제목: 지도에는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿