U E D R , A S I H C RSS

Spiral Array/영동

  • ToyProblem. 1 . 미루 머리 , . , ... . 미리 0, 0 .

#include<iostream>
using namespace std;
const int RIGHT=0;
const int DOWN=1;
const int LEFT=2;
const int UP=3;
const int DIRECTION=4;// 
const int MOVE_X[DIRECTION]={1, 0, -1, 0};
const int MOVE_Y[DIRECTION]={0, 1, 0, -1};
const int MAX_X=5;
const int MAX_Y=5;
struct Mover
{
	int currentX;// x
	int currentY;// y
	int currentDirection;// 동 방
	Mover(int startingX, int startingY)
	{//
		currentX=startingX;
		currentY=startingY;
		currentDirection=RIGHT;
	}
};

void showBoard(int aBoard[][MAX_X]);//배
void setEmptyBoard(int aBoard[][MAX_X]);//배 
void changeDirection(Mover * aMover);//방
int setStartingX();//  : x
int setStartingY();//  : y
void move(Mover * aMover);//동
bool isEnd(int endCount);//루  
bool needToChangeDirection(Mover * aMover, int aBoard[][MAX_X]);//방   
void checkAtBoard(int aBoard[][MAX_X], Mover * aMover, int * aNumber);//를 배 

int main()
{
	Mover mover(setStartingX(), setStartingY());//는 물
	int board[MAX_X][MAX_Y];//배
	int countMove=0;// 

	setEmptyBoard(board);//배 
	checkAtBoard(board, &mover, &countMove);// 
	do 
	{
		if(needToChangeDirection(&mover, board))
			changeDirection(&mover);//방  면 바
		move(&mover);//동
		checkAtBoard(board, &mover, &countMove);//배 
	}while(isEnd(countMove));//

	showBoard(board);// 
	return 1;
}
void showBoard(int aBoard[][MAX_X])
{
	for(int i=0;i<MAX_Y;i++)
	{
		for(int j=0;j<MAX_X;j++)
			cout<<aBoard[i][j]<<"\t";
		cout<<"\n";
	}
}
void setEmptyBoard(int aBoard[][MAX_X])
{
	for(int i=0;i<MAX_Y;i++)
	{
		for(int j=0;j<MAX_X;j++)
			aBoard[i][j]=0;
	}
}
void changeDirection(Mover * aMover)
{
	if(aMover->currentDirection+1>UP)
		aMover->currentDirection=RIGHT;
	else
		aMover->currentDirection+=1;
}
bool isEnd(int endCount)
{
	if(endCount<MAX_X*MAX_Y)
		return true;
	else
		return false;
}
int setStartingX()
{
	int tempX;
	cout<<"  x는?"<<endl;
	cin>>tempX;
	return tempX;
}
int setStartingY()
{
	int tempY;
	cout<<"  y는?"<<endl;
	cin>>tempY;
	return tempY;
}
void move(Mover * aMover)
{	
	aMover->currentX=aMover->currentX+MOVE_X[aMover->currentDirection];
	aMover->currentY=aMover->currentY+MOVE_Y[aMover->currentDirection];
}
bool needToChangeDirection(Mover * aMover, int aBoard[][MAX_X])
{
	if(aMover->currentX+MOVE_X[aMover->currentDirection]>=MAX_X)
		return true;//X방  (MAX)
	if(aMover->currentY+MOVE_Y[aMover->currentDirection]>=MAX_Y)
		return true;//Y방  (MAX)
	if(aMover->currentX+MOVE_X[aMover->currentDirection]<0)
		return true;//X방  (0)
	if(aMover->currentY+MOVE_Y[aMover->currentDirection]<0)
		return true;//Y방  (0)
	if(aBoard[aMover->currentY+MOVE_Y[aMover->currentDirection]][aMover->currentX+MOVE_X[aMover->currentDirection]]!=0)
		return true;//  미 딴   
	else
		return false;
}
void checkAtBoard(int aBoard[][MAX_X], Mover * aMover, int * aNumber)
{
	aBoard[aMover->currentY][aMover->currentX]=(*aNumber)+1;
	(*aNumber)++;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:06
Processing time 0.0126 sec