0141-Sprial Pattern

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0141
自分の居る座標と移動方向を最初に決めて、
移動方向に2回進んだら壁にぶつかるようなところで右回転。
前回移動後0マスまたは1マスで回転するようなときは終了。

'#'と出力すべきところを'*'と出力していたというミスしてしまった。

実装(C++/インクルード省略)

char MAP[104][104];
int nx,ny,vx=0,vy=-1;
void rotate(){ //右回りに回転する
	int tx=vx,ty=vy;
	vx=-ty;vy=tx;
}
int main(){
	int s; //マップの広さ
	int n; //処理する個数
	int t; //終了判定用
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&s);
		memset(MAP,'#',104*104);
		for(int x=1;x<1+s+2;x++){
			for(int y=1;y<1+s+2;y++){
				MAP[x][y]=' ';
			}
		}
		nx=2,ny=s+1;t=0;vx=0;vy=-1;
		while(1){
			MAP[nx][ny]='#';
			if(MAP[nx+vx*2][ny+vy*2]=='#'){
				if(t>0) break;
				t=2;
				rotate();
			} else {
				t--;
				nx+=vx;ny+=vy;
			}
		}
		//表示
		if(i!=0) puts("");
		for(int y=2;y<1+s+1;y++){
			for(int x=2;x<1+s+1;x++){
				printf("%c",MAP[x][y]);
			}
			puts("");
		}
	}
	return 0;
}