<div>일단 스압이라 죄송합니다 ㅠㅠ 코딩이 굉장히 길어요!</div> <div> </div> <div>일단 제가 한 코딩은 Knight's tour라는것이에요.</div> <div>체스말중 하나인 나이트가 움직이는 방법으로 제가 지정한 가로,세로열을 갖는 사각형을 모두 움직일수 있나를 판별하는거에요.</div> <div>가로는 4로 고정을 시켜놓았고,세로는 4~9까지의 변수를 받고,프로그램을 실행시켜서 이게 가능하다면 경로가 출력이되고,안되면 안된다고 창을 띄우는거에요.제가 여기까지 했는데 도저히 모르겠어서 여기에 질문드려요.....죄송합니다!</div> <div> </div> <div>여기서 제가 한 방법은 체스말의 나이트가 움직이는방법 8가지를 random함수를 이용해서 랜덤으로 출력시키고(1~8) switch문을이용해 말을 움직이는거에요. 물론 나이트가 체스판을 벗어나면안되니 제한을 정하고,그 제한을 벗어나면 나가지도록 break를 썻어요.</div> <div> </div> <div> </div> <div>#include<stdio.h><br>#include<stdlib.h><br>#include<time.h></div> <div><font><br>int** board = NULL;</font></div><font></font> <div><font>int main()<br>{<br> srand((unsigned)time(NULL));<br> int currentrow = 1;<br> int currentcolumn = 0;<br> int COL = 0;<br> int i, j;<br> int ROW = 4;<br> int count = 1;<br> int num1;<br> int num2, num3;<br> printf("Please enter column:");<br> scanf_s("%d", &COL);</font></div><font></font> <div><font> board = (int**)calloc(ROW, sizeof(int*));<br> for (i = 0; i < ROW; i++)<br> {<br> board[i] = (int*)calloc(COL, sizeof(int));<br> }</font></div> <div><font>//체스판을 생성한다.</font></div> <div><font> printf("Enter start location [row][col](range:0~ROW/COL-1)\n");<br> scanf_s("%d %d", ¤trow, ¤tcolumn);<br> fflush(stdin);</font></div><font></font> <div><font> board[currentrow][currentcolumn] = 1;// 체스판의 시작점을 출력하고,시작점의 숫자(1)을 정한다.</font></div> <div> <font>while (1)<br> {<br> num1 = rand() % 8+1;<br> <br> switch (num1)<br> {</font></div> <div><font> if(count == 4 * COL)</font></div> <div><font color="#f79646"> {</font></div> <div><font> break;</font></div> <div><font> }<br> case 8:</font></div> <div><font> if(board[currentrow-2][currentcolumn-1]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}<br> currentrow -= 2;<br> currentcolumn--;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 1:</font></div><font> </font><div><font> if(board[currentrow-2][currentcolumn+1]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow -= 2;<br> currentcolumn++;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 2:</div> <div><font> if(board[currentrow-1][currentcolumn+2]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow--;<br> currentcolumn += 2;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 3:</div> <div><font> if(board[currentrow+1][currentcolumn+2]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow++;<br> currentcolumn += 2;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 4:</div> <div><font> if(board[currentrow+2][currentcolumn+1]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow += 2;<br> currentcolumn++;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 5:</div> <div><font> if(board[currentrow+2][currentcolumn-1]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow += 2;<br> currentcolumn--;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 6:</div> <div><font> if(board[currentrow+1][currentcolumn-2]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow++;<br> currentcolumn -= 2;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> case 7:</div> <div><font> if(board[currentrow-1][currentcolumn-2]>0)</font></div> <div><font color="#f79646">{</font></div> <div><font> break;</font></div> <div><font>}</font><br> currentrow--;<br> currentcolumn -= 2;<br> if (currentrow - 2 < 0 || currentrow - 1 < 0 || currentrow + 2 > 4 || currentrow + 1>4 || currentcolumn - 1<0 || currentcolumn - 2<0 || currentcolumn + 1>COL - 1 || currentcolumn + 2 > COL - 1)<br> {<br> break;<br> }<br> count++;<br> break;<br> }<br> } // 랜덤함수를 이용하여 체스판을 계속 움직인다.일정숫자를 다 배열하면 더이상 숫자를 적을필요가 없으므로 반복문을 종료한다.</div> <div><br> free(board);<br> return 0;</div> <div> for (num2 = 0; num2 < 4; num2++)<br> {<br> for (num3 = 0; num3 < COL - 1; num3++)<br> {<br> printf("%d ", board[currentrow][currentcolumn]);<br> }<br> printf("\n");<br> } // 체스판이 움직인경로를 출력</div> <div>}</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.