Faits : A. Le 26 janvier 2018, le Département du développement territorial et de l'environnement du canton de Neuchâtel (ci-après : le Département), par son Service des ponts et chaussées (ci-après : le Service), a lancé un appel d'offre en procédure ouverte portant sur un marché public de travaux de génie civil visant à l'assainissement et au réaménagement de la chaussée de la route cantonale traversant le village de Chézard-Saint-Martin. L'offre de A._ SA et celle de B._ SA ont obtenu le même résultat de 430 points. Par décision du 12 avril 2018, prenant en compte l'offre présentant le prix le plus bas, le Département a adjugé le marché à B._ SA pour un montant de 5'337'266 fr. 45 (TTC). L'offre de A._ SA a été classée au 2e rang. A._ SA a déposé un recours contre la décision d'adjudication du 12 avril 2018 auprès du Tribunal cantonal du canton de Neuchâtel. Elle concluait à ce que le marché lui soit attribué et à l'octroi de l'effet suspensif. Elle se plaignait de motivation insuffisante et de la violation des principes d'intangibilité des offres, de la transparence et de l'égalité de traitement : l'adjudicataire aurait dû être exclu au vu des commentaires et remarques figurant sur son offre; le pouvoir adjudicateur n'avait pas dressé le procès-verbal des séances de clarification des 21 et 26 mars 2018 avec l'adjudicataire; l'adjudicataire avait modifié son offre postérieurement au délai de dépôt des offres par un courrier adressé au pouvoir adjudicateur le 28 mars 2018. Elle se plaignait également de ce que sa variante avait été écartée. Par arrêt du 13 juin 2018, rendant la requête d'effet suspensif sans objet, le Tribunal cantonal du canton de Neuchâtel a rejeté le recours. Les commentaires ajoutés par l'adjudicataire dans son offre ne constituaient pas une modification inadmissible de l'offre et n'étaient pas de nature à modifier le résultat de l'adjudication. Le pouvoir adjudicateur pouvait exclure la variante proposée par le soumissionnaire évincé qui proposait des tuyaux en PVC au lieu de tuyaux en PP, ce qui constituait, selon le mémo complémentaire du bureau d'ingénieur du 27 avril 2018, un changement de produit. La notation des offres concernant le critère d'adjudication 12 (qualité et adéquation des solutions techniques proposées pour l'exécution du marché) n'était pas critiquable. L'absence de procès-verbal relatant le contenu des séances de clarification des 21 et 26 mars 2018 avec l'adjudicataire violait le principe de transparence mais ce vice n'avait pas eu d'influence sur le marché, puisqu'il s'agissait uniquement d'une séance de clarification destinée à déterminer si les remarques figurant dans l'offre devaient conduire à son exclusion du marché. Par arrêt 2D_33/2018 du 13 novembre 2018, le Tribunal fédéral a, sur recours constitutionnel subsidiaire de A._ SA, annulé l'arrêt rendu le 13 juin 2018 par le Tribunal cantonal du canton de Neuchâtel pour déni de justice formel, un grief dûment formulé ayant été omis par l'instance précédente, et renvoyé la cause pour nouvelle décision au sens des considérants. Le 25 août 2018, le contrat de travaux de génie civil visant à l'assainissement et au réaménagement de la chaussée de la route cantonale traversant le village de Chézard-Saint-Martin a été conclu avec B._ SA. Le 20 décembre 2018, A._ SA a modifié ses conclusions concluant au caractère illicite de la décision d'adjudication du 12 avril 2018. B. Par arrêt du 18 juillet 2019, le Tribunal cantonal du canton de Neuchâtel a une nouvelle fois rejeté le recours. Après avoir reproduit les considérants de l'arrêt qu'il avait rendu le 13 juin 2018, le Tribunal cantonal s'est saisi du grief omis qui dénonçait une modification prohibée de l'offre de l'adjudicataire, contenue dans la lettre du 28 mars 2018 de l'adjudicataire au pouvoir adjudicateur et l'a rejeté : l'offre de B._ SA répondait aux exigences de cahier des charges. En particulier, elle prévoyait un fraisage et la fourniture de graves conformément au cahier des charges, tandis que le rapport technique fournit avec l'offre traitait, dans certains passages, de dégrappage. Lors de la séance de clarification, l'adjudicataire avait confirmé qu'elle exécuterait son offre conformément au cahier des charges, de sorte qu'elle avait pu indiquer qu'il fallait considérer comme nuls les passages du rapport technique traitant du dégrappage. Le courrier du 28 mars 2018 ne modifiait par conséquent pas l'offre mais confirmait plutôt qu'elle serait réalisée selon le cahier des charges et selon les conditions offertes dans ses dossiers. Il n'y avait par conséquent pas de violation du principe de l'intangibilité des offres. C. Agissant par la voie du recours constitutionnel subsidiaire, A._ SA demande au Tribunal fédéral, sous suite de frais et dépens, d'annuler l'arrêt rendu le 18 juillet 2019 par le Tribunal cantonal du canton de Neuchâtel et de constater l'illicéité de la décision d'adjudication du 12 avril 2018. Elle se plaint d'arbitraire dans la constatation et l'appréciation de faits pertinents et dans l'application des principes de la transparence, de l'égalité de traitement et de l'impartialité. Le Tribunal cantonal et le Département du développement territorial et de l'environnement du canton de Neuchâtel et B._ SA renoncent à déposer des observations.