The game was marred by a couple of heated exchanges between players, with Flower and rival England wicketkeeper James Foster confronting each other after one of several appeals was turned down.
England struggled to contain Flower as the home side, opting to bat, made 261 for eight in the third game of the five-match series.
Flower’s century came off 97 balls and he ended his innings, a career best, having hit 16 fours and a six. Pace bowler Matthew Hoggard took five for 49 for England.
Flower and Foster went eyeball to eyeball after an unsuccessful appeal for caught behind off seamer Paul Collingwood in the 40th over.
Foster approached Flower, who was on 99, after umpire Chris Nyazika gave it not out. The two players exchanged more words while Flower was taking his guard for the next delivery, forcing square leg umpire Ian Robertson to intervene.
Flower went to his century with the following delivery and then hammered the bowling in a brilliant display of placement and timing.
Flower and Heath Streak put on a world record 130 for the seventh wicket in 22 overs.
But Streak, who batted most of his innings with a runner while scoring 56, paid a price as the paceman was unable to bowl when England batted.
England eventually got home thanks to skipper Nasser Hussain, who came in at number seven despite a calf strain and made 28 not out, ending the game with a straight six after Zimbabwe had raised their hopes by removing danger-man Andy Flintoff.
England concluded on 265 for six with 15 balls to spare.
Nick Knight (41) and Mark Ramprakash (47) had set England on the way with 67-run stand for the second wicket while Paul Collingwood and Flintoff, who made 46 at a run a ball before holing out to deep midwicket, put on 72 for the fifth wicket.
ZIMBABWE
A.Campbell lbw b Hoggard 8
G.Flower c Flintoff b Hoggard 1
S.Carlisle c Knight b Sidebottom 1
A.Flower not out 142
C.Wishart c Snape b Hoggard 4
D.Ebrahim st Foster b Collingwood 22
D.Marillier run out 12
H.Streak c Thorpe b Hoggard 56
D.Viljoen c Thorpe b Hoggard 0
G.Brent not out 0
EXTRAS (lb-5 w-10) 15
TOTAL (for eight wickets, 50 overs) 261
FALL OF WKTS: 1-2 2-7 3-19 4-56 5-95 6-127 7-257 8-257
DID NOT BAT: Henry Olonga
BOWLING: Hoggard 10-0-49-5 (w-2), Sidebottom 8-0-42-1 (w-3), Flintoff 7-1-43-0 (w-2), Snape 10-0-47-0 (w-1), Collingwood 9-0-45-1 (w-1), Ramprakash 6-0-30-0 (w-1)
ENGLAND
M.Trescothick c A.Flower b Olonga 14
N.Knight c Olonga b Marillier 41
M.Ramprakash run out 47
G.Thorpe c Wishart b G.Flower 8
P.Collingwood c A.Flower b Brent 36
A.Flintoff c Viljoen b G.Flower 46
N.Hussain not out 28
J.Snape not out 24
EXTRAS (lb-3 w-13 nb-5) 21
TOTAL (for six wickets, 47.3 overs) 265
FALL OF WKTS: 1-28 2-95 3-108 4-126 5-195 6-214
DID NOT BAT: James Foster, Ryan Sidebttom, Matthew Hoggard
BOWLING: Olonga 9-0-60-1 (nb-3), Brent 8-0-53-1 (w-6), Viljoen 10-0-58-0 (w-6), Marillier 10-0-47-1 (w-1), G.Flower 10-1-38-2, Ebrahim 0.3-0-6-0.
RESULT: England won by four wickets.
Man-of-the-match: Andy Flower (Zimbabwe)—Reuters