<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%AF%B8%EB%A1%9C%EC%B0%BE%EA%B8%B0%2F%EC%98%81%EB%8F%99</id>
	<title>미로찾기/영동 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=%EB%AF%B8%EB%A1%9C%EC%B0%BE%EA%B8%B0%2F%EC%98%81%EB%8F%99"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%AF%B8%EB%A1%9C%EC%B0%BE%EA%B8%B0/%EC%98%81%EB%8F%99&amp;action=history"/>
	<updated>2026-05-15T05:22:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=%EB%AF%B8%EB%A1%9C%EC%B0%BE%EA%B8%B0/%EC%98%81%EB%8F%99&amp;diff=50525&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:29, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=%EB%AF%B8%EB%A1%9C%EC%B0%BE%EA%B8%B0/%EC%98%81%EB%8F%99&amp;diff=50525&amp;oldid=prev"/>
		<updated>2021-02-07T05:29:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== MazePath.cpp ==&lt;br /&gt;
 #include&amp;amp;lt;iostream&amp;amp;gt;&lt;br /&gt;
 #include&amp;amp;lt;fstream&amp;amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 //Constant values about direction&lt;br /&gt;
 #define DIRECTION 4&lt;br /&gt;
 #define UP 0&lt;br /&gt;
 #define RIGHT 1&lt;br /&gt;
 #define DOWN 2&lt;br /&gt;
 #define LEFT 3&lt;br /&gt;
 const int MOVE_X[DIRECTION]={0, 1, 0, -1};&lt;br /&gt;
 const int MOVE_Y[DIRECTION]={-1, 0, 1, 0};&lt;br /&gt;
 //Constant Values about maze[][] and mark[][] &lt;br /&gt;
 #define SIZE_X 6&lt;br /&gt;
 #define SIZE_Y 7&lt;br /&gt;
 #define EMPTY 0&lt;br /&gt;
 #define BLOCKED 1&lt;br /&gt;
 #define MARKED 1&lt;br /&gt;
 //Structure about stack&lt;br /&gt;
 #define STACK_SIZE SIZE_X*SIZE_Y&lt;br /&gt;
 struct Element&lt;br /&gt;
 {//&lt;br /&gt;
 	int x;&lt;br /&gt;
 	int y;&lt;br /&gt;
 	int dir;&lt;br /&gt;
 	Element(int aX, int aY, int aDir)&lt;br /&gt;
 	{//Constructor with initial data&lt;br /&gt;
 		x=aX;&lt;br /&gt;
 		y=aY;&lt;br /&gt;
 		dir=aDir;&lt;br /&gt;
 	}&lt;br /&gt;
 	Element(){}//Default constructor&lt;br /&gt;
 };&lt;br /&gt;
 //Function about stack&lt;br /&gt;
 void push(int * argTop, Element * argStack, Element item);&lt;br /&gt;
 bool isEmpty(int argTop);&lt;br /&gt;
 Element pop(int * argTop, Element * argStack);&lt;br /&gt;
 void display(int argX, int argY, int argMaze[][SIZE_X+2]);&lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
 	int maze[SIZE_Y+2][SIZE_X+2];&lt;br /&gt;
 	int mark[SIZE_Y+2][SIZE_X+2]={{0,},{0,1,}};&lt;br /&gt;
 	//Starting point is already marked&lt;br /&gt;
 	int top=-1;&lt;br /&gt;
 	//Assign maze with file IO&lt;br /&gt;
 	ifstream fin(&amp;quot;mazeTxt.txt&amp;quot;);&lt;br /&gt;
 	while(!fin.eof())&lt;br /&gt;
 	{//Until end of file&lt;br /&gt;
         for(int y=0;y&amp;amp;lt;SIZE_Y+2;y++){ &lt;br /&gt;
             for(int x=0;x&amp;amp;lt;SIZE_X+2;x++){ &lt;br /&gt;
                 fin&amp;amp;gt;&amp;amp;gt;maze[y][x]; &lt;br /&gt;
                 if(maze[y][x]==BLOCKED) &lt;br /&gt;
                     maze[y][x]=BLOCKED; &lt;br /&gt;
                 else  &lt;br /&gt;
                     maze[y][x]=EMPTY; &lt;br /&gt;
             } &lt;br /&gt;
             fin.get();&lt;br /&gt;
         } &lt;br /&gt;
     }&lt;br /&gt;
 	//Declare stack&lt;br /&gt;
 	Element stack[STACK_SIZE];&lt;br /&gt;
 	//Push the starting point into the stack&lt;br /&gt;
 	push(&amp;amp;amp;top, stack, Element(1, 1, 1));&lt;br /&gt;
 &lt;br /&gt;
 	int y, x, dir;&lt;br /&gt;
 	int nextY, nextX;&lt;br /&gt;
 	while(!isEmpty(top))&lt;br /&gt;
 	{//Until stack is empty&lt;br /&gt;
 		Element temp=pop(&amp;amp;amp;top, stack);&lt;br /&gt;
 		y=temp.y;&lt;br /&gt;
 		x=temp.x;&lt;br /&gt;
 		dir=temp.dir;&lt;br /&gt;
 		while(dir&amp;amp;lt;=LEFT)&lt;br /&gt;
 		{&lt;br /&gt;
 			nextY=y+MOVE_Y[dir];&lt;br /&gt;
 			nextX=x+MOVE_X[dir];&lt;br /&gt;
 			if(nextY==SIZE_Y &amp;amp;amp;&amp;amp;amp; nextX==SIZE_X)&lt;br /&gt;
 			{//Is in the end point?&lt;br /&gt;
 				display(nextX, nextY, maze);&lt;br /&gt;
 				push(&amp;amp;amp;top, stack, Element(x, y, dir));&lt;br /&gt;
 				//Push the last movement to stack&lt;br /&gt;
 				for(int i=0;i&amp;amp;lt;top+1;i++)&lt;br /&gt;
 				{//Print path from start to end&lt;br /&gt;
 					if(stack[i].dir==DOWN)&lt;br /&gt;
 						cout&amp;amp;lt;&amp;amp;lt;&amp;quot;DOWN &amp;quot;;&lt;br /&gt;
 					else if(stack[i].dir==UP)&lt;br /&gt;
 						cout&amp;amp;lt;&amp;amp;lt;&amp;quot;UP &amp;quot;;&lt;br /&gt;
 					else if(stack[i].dir==LEFT)&lt;br /&gt;
 						cout&amp;amp;lt;&amp;amp;lt;&amp;quot;LEFT &amp;quot;;&lt;br /&gt;
 					else&lt;br /&gt;
 						cout&amp;amp;lt;&amp;amp;lt;&amp;quot;RIGHT &amp;quot;;&lt;br /&gt;
 				}&lt;br /&gt;
 				cout&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 				return 0;&lt;br /&gt;
 			}&lt;br /&gt;
 			if(maze[nextY][nextX]==EMPTY &amp;amp;amp;&amp;amp;amp; mark[nextY][nextX]==EMPTY)&lt;br /&gt;
 			{//The next position is available&lt;br /&gt;
 				display(x, y, maze);&lt;br /&gt;
 				mark[nextY][nextX]=MARKED;&lt;br /&gt;
 				push(&amp;amp;amp;top, stack, Element(x, y, dir));&lt;br /&gt;
 				y=nextY;&lt;br /&gt;
 				x=nextX;&lt;br /&gt;
 				dir=UP;&lt;br /&gt;
 			}&lt;br /&gt;
 			else&lt;br /&gt;
 			{&lt;br /&gt;
 				dir++;&lt;br /&gt;
 				display(x, y, maze);&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 	cout&amp;amp;lt;&amp;amp;lt;&amp;quot;There is no path in maze\n&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 	return 0;&lt;br /&gt;
 }&lt;br /&gt;
 void push(int *argTop, Element * argStack, Element item)&lt;br /&gt;
 {//Insert the element into the stack&lt;br /&gt;
 	if(*argTop&amp;amp;gt;=STACK_SIZE-1)&lt;br /&gt;
 	{&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Your stack is full now\n&amp;quot;;&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 	argStack[++(*argTop)]=item;&lt;br /&gt;
 }&lt;br /&gt;
 Element pop(int * argTop, Element * argStack)&lt;br /&gt;
 {//Take the element from the stack&lt;br /&gt;
 	if(isEmpty(*argTop))&lt;br /&gt;
 	{&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;&amp;quot;Your stack is empty now\n&amp;quot;;&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 	else &lt;br /&gt;
 		return argStack[(*argTop)--];&lt;br /&gt;
 }&lt;br /&gt;
 bool isEmpty(int argTop)&lt;br /&gt;
 {//Is the stack empty?&lt;br /&gt;
 	if(argTop==-1)&lt;br /&gt;
 		return true;&lt;br /&gt;
 	else&lt;br /&gt;
 		return false;&lt;br /&gt;
 }&lt;br /&gt;
 void display(int argX, int argY, int argMaze[][SIZE_X+2])&lt;br /&gt;
 {//Show the maze and current position&lt;br /&gt;
 	system(&amp;quot;cls&amp;quot;);&lt;br /&gt;
 	for(int i=0;i&amp;amp;lt;SIZE_Y+2;i++)&lt;br /&gt;
 	{&lt;br /&gt;
 		for(int j=0;j&amp;amp;lt;SIZE_X+2;j++)&lt;br /&gt;
 		{&lt;br /&gt;
 			if(i==argY &amp;amp;amp;&amp;amp;amp; j==argX)&lt;br /&gt;
 				cout&amp;amp;lt;&amp;amp;lt;&amp;quot;⊙&amp;quot;;//Current Position&lt;br /&gt;
 			else if(argMaze[i][j]==0)&lt;br /&gt;
 				cout&amp;amp;lt;&amp;amp;lt;&amp;quot;　&amp;quot;;//Path&lt;br /&gt;
 			else&lt;br /&gt;
 				cout&amp;amp;lt;&amp;amp;lt;&amp;quot;■&amp;quot;;//Wall&lt;br /&gt;
 		}&lt;br /&gt;
 		cout&amp;amp;lt;&amp;amp;lt;endl;&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
== mazeTxt.txt ==&lt;br /&gt;
 1 1 1 1 1 1 1 1&lt;br /&gt;
 1 0 1 1 0 1 1 1&lt;br /&gt;
 1 0 0 1 0 1 1 1&lt;br /&gt;
 1 1 0 0 0 1 1 1&lt;br /&gt;
 1 1 1 0 0 0 1 1&lt;br /&gt;
 1 0 0 0 1 1 1 1&lt;br /&gt;
 1 1 0 1 0 0 0 1&lt;br /&gt;
 1 0 0 0 0 1 0 1&lt;br /&gt;
 1 1 1 1 1 1 1 1&lt;br /&gt;
----&lt;br /&gt;
작성자: 임영동 [[Yggdrasil]]&lt;br /&gt;
----&lt;br /&gt;
[[미로찾기]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>