spiral matrix ii

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

For example,
Given n = 3,

You should return the following matrix:

[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
vector<vector<int> > generateMatrix(int n) {
vector<vector<int> >matrix(n,vector<int>(n,0));
int ux=0, uy=0, dx=n-1, dy=n-1;
int count = 0;
while(ux < dx && uy < dy){
for(int i=uy; i<dy; i++){
count++;
matrix[ux][i] = count;
}
for(int i=ux; i<dx; i++){
count++;
matrix[i][dy] = count;
}
for(int i=dy; i>uy; i--){
count++;
matrix[dx][i] = count;
}
for(int i=dx; i>ux; i--){
count++;
matrix[i][uy] = count;
}
ux++;dx--;
uy++;dy--;
}
if(ux == dx && uy == dy){
matrix[ux][uy] = (++count);
}
return matrix;
}