Définir chaque cellule de la matrice à 0 si la ligne ou la colonne contient un 0

Donné une matrice NxN avec des 0 et des 1. Jeu de chaque ligne contient un 0 à tous 0s et définissez chaque colonne qui contient une 0 à tous 0s.

Par exemple

1 0 1 1 0
0 1 1 1 0
1 1 1 1 1
1 0 1 1 1
1 1 1 1 1

résultats dans

0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
0 0 0 0 0
0 0 1 1 0

Microsoft Ingénieur m'a dit qu'il existe une solution qui n'implique pas de mémoire supplémentaire, à seulement deux variables booléennes et un laissez-passer, donc je suis à la recherche de cette réponse.

BTW, imaginez que c'est un peu de la matrice, donc juste 1s et 0s sont de permettre à l'être dans la matrice.

  • Hein? Qu'est-ce que "chaque fois que vous rencontrez"? Dans quel ordre sont que vous rencontriez les éléments dans la matrice? Et si vous rencontrez tous les bits, ne sera pas vous obtenir tous les 0 de toute façon?
  • Ainsi, l'ordre dans lequel vous décidez de rencontre éléments de la décision, la chose est que vous ne devez définir à 0 le bon éléments. Si vous rencontrez tous les bits mis à 0, oui la matrice va encore être rempli avec des zéros.
  • Quels sont les "éléments nécessaires"? Êtes-vous donné deux matrices, l'une à la "source" de la matrice et une "cible" de la matrice, et vous devez décider de l'ordre dans lequel "la rencontre" les éléments de façon à obtenir la "cible" de la matrice?
  • Donc, en d'autres termes, une cellule est de 1 ssi toutes les valeurs dans la ligne et la colonne sont 1 aussi?
  • Qu'est ce que la question déclaré implique, mais ce n'est pas ce qui est prévu, parce que vous ne pouvez pas avoir tout 1 dans la matrice, sauf si c'est toutes les 1 du. 🙂
  • Pour une valeur de 1 dans la matrice de toutes les valeurs dans sa ligne doivent également être de 1, et de toutes les valeurs, dans sa colonne doit également être 1. S'il y a des zéros sur sa ligne et de colonne, la valeur est zéro.
  • Je pense que vous avez mal quelque chose pour le "1 pass' pense. Il peut être fait de façon linéaire en 2 passes, bien que sans la mémoire supplémentaire, à seulement 2 booléens 😉 Donc je suppose que c'est la solution qu'il voulait dire (voir ci-dessous)
  • Pour "en passant par" la matrice, vous aurez besoin d'au moins une variable d'index (qui ne peut pas être de type boolean).
  • Pouvez-vous s'il vous plaît double-vérifier avec votre ami si la description du problème est en effet correcte? Je pensais que je pouvais le faire avec les codes de Hamming ou des bits de parité, mais jusqu'à présent je n'ai eu aucun succès, et le problème tient à l'épinglage dans ma tête. 🙂
  • Vous pouvez utiliser la matrice de la variable elle-même en tant que votre variable d'index. Suffit d'utiliser l'arithmétique des pointeurs de passer par la matrice.
  • Je suis sûr que la solution a quelque chose à voir avec la récursivité. La bonne chose à propos de la récursivité est qu'il agit comme une machine à remonter le temps que si vous réglez votre cellule de matrice (dans ce cas) à la valeur de la fonction récursive, vous serez en mesure de le régler à une valeur que vous ne trouverez pas sur jusqu'à ce que l'avenir, vous permettant ainsi de remonter dans le temps, ce qui en fait vous pouvez faire cette chose en un seul passage. Aussi, vous pourrez faire votre indexation via les paramètres de la fonction récursive, plutôt que dans les boucles for.
  • Idée intéressante : Son semblable, en théorie, à la résolution d'un soduku puzzle, juste avec le binaire 🙂
  • Sonne comme montrant la domination de la 8-Reines, qui est un problème bien connu utilisé comme une référence dans AI +1
  • geeksforgeeks.org/a-boolean-matrix-question
  • non, si vous devez aller à travers l'élément une fois de plus pour vérifier sa valeur, c'est une deuxième passe.