I’ll use this is Gen 8/NatDex AG, but the answer is similar for both.
One of Gen 8 and NatDex AG’s best Pokémon. It can take hits from Zacian-C, heal off with morning sun, and hit Zacian hard with a Sunsteel Strike or even an Earthquake (which is used more in Gen 8 AG). However, Zacian-C can break it. If Zacian-C uses swords dance on the switch and swords dance again, it can threaten to OHKO, and the OHKO is guaranteed if NDM has suffered minor chip. However, Zacian-C would have to suffer large damage from Sunsteel Strike/Earthquake, as well as the possibility of Rocky helmet damage, as well as the defense drops. This makes it vulnerable to revenge killing. Another way Zacian-C can break NDM is by use of assurance, which doubles in damage and is super effective if NDM switches in and steps on Rocks/Spikes. Followed that by a close combat and NDM goes down. Sometimes, although rarely, NDM runs Heavy-Duty Boots to counter Assurance.
A Pokémon usually used on stall due to Necrozma-Dusk being a better Pokémon in the meta, Quagsire is pretty much the only true Zacian-C counter. With unaware, it can shrug off close combats and play roughs, recover, and hit with Earthquake or try to burn with Scald. However, if the opponent has stacked a lot of hazards, Zacian-C can 2HKO on the switch, so Quagsire occasionally runs Heavy-Duty boots. Other times, it runs Leftovers for more healing or a Rocky Helmet to damage Zacian and other physical attackers more.
Well, these are the two best. Hope this helps!
(Also, I’d like to mention Ditto. It cannot switch in to Zacian, so it’s not a counter, but if Zacian-C faints a Pokémon, it can be brought in. It gets a second Intrepid Sword boost, so it has 2+ attack, plus a Scarf boost. It’s even stronger if the opposing Zacian has used swords dance before. Close Combat from it can break NDM, so you’re almost guaranteed to take out atleast one Pokémon. Ditto-Zacian’s only 100% reliable switchin is Quagsire until it choice locks itself on to a move.)