Algorithme: déterminer la forme de deux secteurs délimités par une voie quelconque, et ensuite remplir une

voix
2

NOTE: Ceci est un problème difficile pour tous ceux qui aime les problèmes logiques, etc.

Considérons une grille à deux dimensions rectangulaire de hauteur H et de largeur W. Chaque espace sur la grille a une valeur, soit 0 1ou 2. Dans un premier temps , chaque espace sur la grille est 0, à l' exception des espaces le long de chacun des quatre bords, qui sont d' abord un 2.

Ensuite , envisager un trajet arbitraire d'emplacements de grille adjacents (horizontalement ou verticalement). Le chemin commence sur 2et se termine sur un autre 2. Chaque espace le long du chemin est 1.

Le chemin divise la grille en deux « secteurs » des 0espaces. Il y a un objet qui repose sur une non spécifiée d' 0espace. Le « secteur » qui ne contient pas l'objet doit être complètement rempli 2.

Définir un algorithme qui détermine les espaces qui doivent devenir 2de 0, étant donné un réseau (liste) des valeurs ( 0, 1, ou 2) qui correspondent aux valeurs de la grille, en allant de haut en bas, puis de gauche à droite. En d' autres termes, l'élément à l' index 0 dans le tableau contient la valeur de l'espace supérieur gauche de la grille (initialement un 2). L'élément à l' index 1 contient la valeur de l'espace dans la grille qui se trouve dans la colonne de gauche, deuxième à partir du haut, et ainsi de suite. L'élément à l' index H contient la valeur de l'espace dans la grille qui se trouve dans la rangée supérieure , mais secondes depuis le côté gauche, et ainsi de suite.

Une fois que les finitions de l' algorithme et le vide « secteur » est rempli complètement avec 2s, l'algorithme SAME doit être suffisante pour faire à nouveau le même processus. Le deuxième (et) le temps, le chemin est encore tiré d'un 2à un autre 2, à travers des espaces de 0, mais la « grille » est plus petit parce que le 2s qui sont entourées par d' autres 2s ne peut pas être touché par le chemin (puisque le chemin est le long des espaces de 0).

Je remercie quiconque est en mesure de comprendre cela pour moi, très bien. Cela ne doit pas être dans un langage de programmation; en fait, pseudo-code ou juste anglais est suffisant. Merci encore! Si vous avez des questions, il suffit de laisser un commentaire et je vais préciser ce qui doit être spécifié.

Créé 15/05/2010 à 22:07
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Il me semble un base de remplissage d'inondation algorithme serait faire le travail:

  • Numérisez votre tableau pour la première 0vous trouvez, puis commencer un remplissage inondation à partir de là, le remplissage de la 0région avec un autre nombre, disons 3- cela l' étiquette un de vos « secteurs ».
  • Une fois cela fait, scanner à nouveau pour une 0, et d' inondation remplir à partir de là, le remplissage avec 4cette fois -ci .
  • Pendant les deux remplissages, vous pouvez vérifierez si vous avez trouvé votre objet ou non; selon vous remplissez le trouver pendant garder une trace de ce nombre.
  • Après les deux remplissages sont effectués, vérifiez quelle région numérotée avait l'objet en elle - inondation remplir cette région encore, de retour avec 0cette fois -ci .
  • Remplit l'autre région numérotée avec 2, et vous avez terminé.

Cela va travailler pour toute configuration de réseau, tant qu'il ya exactement deux 0secteurs qui sont déconnectés les uns des autres; afin de réappliquer le même algorithme un nombre de fois est très bien.

Edit: modifications mineures, pour vous sauver une inondation ou de remplissage deux -

  • Si vous ne trouvez pas votre objet dans le premier remplissage d'inondation, vous pouvez supposer que l'autre secteur a, vous donc juste remplir à nouveau le nombre actuel avec 2et laisser l'autre seul secteur (puisqu'il est déjà 0-filled).
  • Sinon, si vous ne trouvez l'objet dans le premier remplissage d'inondation, vous pouvez directement remplir l'autre secteur avec 2, puis re-remplir le premier secteur avec 0.
Créé 15/05/2010 à 22:23
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more