Un de mes élèves m'a demandé ce genre de devoir avec des tableaux C++. Cela m'a semblé très intéressant, alors même si j'ai résolu ce problème, je voulais partager ma solution avec vous et connaître d'autres variantes et opinions. Le problème est le suivant:Faire pivoter un tableau 2D sur place sans utiliser un nouveau tableau - la meilleure solution C++?
problème lui est attribuée une matrice quadratique 2D dynamique (tableau) A (nxn). Il est nécessaire de faire pivoter la matrice de 90 degrés dans le sens inverse des aiguilles d'une montre, c'est-à-dire qu'après la rotation, le champ A [1,1] doit contenir la valeur de A [1, n] et le champ A [1, n] A [n, n]. Et il est également nécessaire que tout en résolvant ce problème, vous ne devez utiliser aucun autre tableau.
Ma solution Je vous ai dit à l'étudiant de faire ce qui suit (étapes représentera schématiquement):
je l'ai suggéré de définir une classe qui, comme son membre, aura le tableau 2D. Et de définir une opération qui référence le retour sur A [j, n + 1-i] élément lorsque l'utilisateur demandera A [i, j] une. En deux mots, je l'ai suggéré de créer une enveloppe pour le tableau, et manipuler par réseau à travers l'emballage.
Votre solution ne résout pas vraiment le problème. Vous ne faites que retourner l'élément correct pour chaque requête, mais vous ne le faites pas tourner comme le problème vous le demande. +1 pour un problème intéressant cependant. – IVlad
@IVlad: en réalité, la résolution reste une question de vue. Vous pouvez être certain que c'est la façon dont des programmes comme matlab implémentent la transposition matricielle, en utilisant juste un état et des getters appropriés, pas de vraies transformations. Bien sûr, je doute que mes professeurs acceptent cette réponse à un examen: D. – KillianDS
Atention !!! Toutes ces solutions utilisent un nouveau tableau! La solution devrait être sans utiliser un nouveau tableau. – Narek