Supposons que nous ayons une matrice comme celle-ci:
11111
12221
12321
12221
11111
Cette matrice représente un terrain et chaque cellule représente une portion de terrain. Le nombre dans chaque cellule représente le temps pendant lequel la portion de terrain doit être complètement brûlée (en minutes, si une unité de mesure est nécessaire), selon sa combustibilité . Si un feu démarre à une position donnée (cellule), cette cellule doit être complètement brûlée avant que le feu ne se propage aux cellules adjacentes (horizontale et verticale uniquement, pas en diagonale). Donc, si un feu est démarré en position centrale, le feu a besoin:
11111 11111 11111 11011 10001 00000
12221 3 m. 12221 2 m. 12021 1 m. 11011 1 m. 00000 1 m. 00000
12321 -----> 12021 -----> 10001 -----> 00000 -----> 00000 -----> 00000
12221 12221 12021 11011 00000 00000
11111 11111 11111 11011 10001 00000
Explication:
- Le feu commence à [2,2] (sur la base de 0), ce qui a un temps de combustion de 3.
- Après 3 minutes, [1,2], [2,1], [2,3], [3,2] commencent à brûler.
- Après 2 minutes, ces cellules finissent de brûler et le feu se propage à toutes les cellules adjacentes, mais [0,2], [2,0], [2,4], [0,4] n'ont besoin que d'une minute de plus pour brûler, donc
- Après 1 minute, ces cellules sont brûlées et la cellule se propage aux cellules adjacentes.
- Après 1 minute de plus, le reste des cellules de l'étape 3 finit de brûler et le feu se propage vers leurs cellules adjacentes (qui sont déjà brûlées, donc rien ne se passe).
- Après 1 dernière minute, le feu finit de brûler tout le terrain.
La solution à ce cas est donc de 8 minutes. Si le feu démarre dans la cellule la plus à gauche [0,0]:
11111 01111 00111 00011 00001 00000
12221 1 12221 1 02221 1 01221 1 00121 1 00011 1
12321 --> 12321 --> 12321 --> 02321 --> 01321 --> 00321 -->
12221 12221 12221 12221 02221 01221
11111 11111 11111 11111 11111 01111
00000 00000 00000 00000 00000
00000 1 00000 1 00000 1 00000 1 00000
00221 --> 00110 --> 00000 --> 00000 --> 00000
00221 00121 00020 00010 00000
00111 00011 00001 00000 00000
Alors maintenant, le temps total est de 10 minutes.
Le défi
Étant donné une matrice NxM (N> 0, M> 0) de valeurs entières qui représentent le temps nécessaire à chaque cellule pour être complètement consommée, écrivez le programme / la fonction la plus courte qui prend cette matrice et une paire d'entiers avec la position dans laquelle le feu commence. , et retourne / imprime le temps nécessaire au feu pour consommer complètement le terrain entier.
- Chaque cellule aura un temps de combustion positif (non nul). Vous ne pouvez pas supposer une valeur maximale pour les cellules.
- La matrice n'a pas besoin d'être carrée ni symétrique.
- La matrice peut être indexée 0 ou indexée 1, comme vous le souhaitez.
- La position peut être donnée en tant que paramètre unique avec un tuple d'entiers, deux paramètres distincts de tout autre format raisonnable.
- Les dimensions de la matrice ne peuvent pas être spécifiées comme paramètres d'entrée.
- Vous n'avez pas besoin de sortir chaque étape intermédiaire, juste le temps demandé. Mais je ne me plaindrai pas si les étapes sont visualisées de quelque façon que ce soit.
Un autre exemple:
Fire starts at [1,1] (a '>' represents a minute):
4253 4253 4253 4153 4043 3033 2023 0001 0000
2213 > 2113 > 2013 > 1003 > 0002 > 0001 > 0000 >> 0000 > 0000
1211 1211 1211 1111 1001 0000 0000 0000 0000
Output: 9
C'est du golf de code , alors le programme le plus court pour chaque langue peut gagner!
1
àM*N