Maison > Java > javaDidacticiel > le corps du texte

Comment résoudre le problème du robot marchant sur la grille en Java

WBOY
Libérer: 2023-04-24 09:28:12
avant
1264 Les gens l'ont consulté

Titre : Il y a une grille avec m lignes et n colonnes sur la carte. Un robot commence à se déplacer à partir de la grille aux coordonnées (0,0). Les directions dans lesquelles il peut se déplacer à chaque fois sont le haut, le bas, la gauche et la droite. et il ne peut déplacer que Déplacer une grille, mais ne peut pas entrer dans une grille où la somme des coordonnées de ligne et des coordonnées de colonne est supérieure à K. Par exemple, lorsque K vaut 16, le robot peut entrer dans le carré (24,19) car 2+4+1+9=16, mais ne peut pas entrer dans le carré (34,28) car 3+4+2+8= 17>16. ,

Q : Combien de grilles ce robot peut-il atteindre ?

Analyse :

Cette question est relativement simple et peut être décomposée en 4 parties :

1) Comment calculer la somme des chiffres d'un nombre

2) Si le robot peut entrer dans une certaine grille

3 ) S'il peut entrer dans la grille, si la grille dans les quatre quartiers peut être saisie,

4) Les statistiques peuvent atteindre plusieurs grilles au total

1) Code

<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>
Copier après la connexion

2) Code

<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>
Copier après la connexion

3) Code

<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>
Copier après la connexion

4) Code

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;}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal