「AOJ141~150」の編集履歴(バックアップ)一覧に戻る

AOJ141~150 - (2011/08/19 (金) 14:34:24) の編集履歴(バックアップ)



0141 Spiral Pattern

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0141
簡単な問題だけど結構時間かかった。
なぜだろう?
ルールは簡単なはずなのに?

#include <stdio.h>
void solve(int);
char map[101][101];
int dx[4]={0,1,0,-1};
int dy[4]={-1,0,1,0};
int move;
int main()
{
int d,n;
scanf("%d",&d);
for(int i=0;i<d;i++)
{
	scanf("%d",&n);
	solve(n);
	if(i!=d-1){
		printf("\n");
	}
	
}
}
void solve(int n)
{
int x=1,y=n,nx,ny;

if(n==1){printf("#\n");return;}


int r=0;

for(int i=0;i<=n;i++){
	for(int j=0;j<=n;j++){
		map[i][j]=' ';
	}
}
map[x][y]='#';

int count;
int count2=0;
while(count2<2){
	nx=x+dx[r];
	ny=y+dy[r];
	if(n>=nx && nx>0 && n>=ny && ny>0){
		count=0;
		for(int i=0;i<4;i++){
			if(map[nx+dx[i]][ny+dy[i]]=='#') count++;
		}
		
		if(count<2){
			map[nx][ny]='#';
			x=nx;
			y=ny;
			count2=0;
		}else{
			r=(r+1)%4;
			count2++;
		}
		
	}else{
		r=(r+1)%4;
		count2++;
	}
}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			printf("%c",map[j][i]);
		}
		printf("\n");
	}
}