디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[조공] 형들 소스짜는데 좀도와줘 ㅜ

또비(14.51) 2011.03.13 19:41:06
조회 169 추천 0 댓글 2






#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_STACK_SIZE 100
#define ROW_SIZE 3
#define COL_SIZE 4
#define TRUE 1
#define FALSE 0

typedef struct // 4방향의 좌표를 가질 구조체
{
        int row;
        int col;
        int dir;
}element;

element stack[MAX_STACK_SIZE];

typedef struct 
{
        int vert;
        int horiz;
}offsets;

offsets move[4];

int top = -1;

char mark[ROW_SIZE+2][COL_SIZE+2];
int EXIT_ROW = ROW_SIZE,    EXIT_COL = COL_SIZE;
int maze[ROW_SIZE+2][COL_SIZE+2] = { // 미로를 구성하는 배열 (바깥테두리는 모두 1로 표시)
 {1,1,1,1,1,1},
 {1,0,0,0,0,1},
 {1,0,0,0,0,1},
 {1,0,0,0,0,1},
 {1,1,1,1,1,1},
};

void path(void);
void add(int *top, element item);
element del(int *top);
void stack_full();
element stack_empty();

int main(void)
{

        int i, j;

        for(i=0;i<=ROW_SIZE+1; i++)
        {
                for(j=0; j<=COL_SIZE+1; j++)
                {
                        if (maze[i][j] == 0) mark[i][j] = \'0\';
                        if (maze[i][j] == 1) mark[i][j] = \'1\';
                }
        }

        move[0].vert = 1; move[0].horiz = 0; /* 동쪽 */
        move[1].vert = -1; move[1].horiz = 0; /* 서쪽 */
        move[2].vert = 0; move[2].horiz = 1; /* 남쪽 */
        move[3].vert = 0; move[3].horiz = -1; /* 북쪽 */

        path();

        for(i=0;i<=ROW_SIZE+1; i++)
        {
                for(j=0; j<=COL_SIZE+1; j++)
                {        
                        printf("%c", mark[i][j]);
                }
                printf("\\n");
        }
        return 0;    
}

void path(void)
{
        int i, j, row, col, next_row, next_col, dir, found = FALSE;
 
        element position;

        maze[1][1] = 1;
        top =0;
        stack[0].row = 1;
        stack[0].col = 1;
        stack[0].dir = 0;

        while(top > -1 && !found)
        {
                position = del(&top);
                row=position.row;
                col=position.col;
                dir=position.dir;
                while(dir < 4 && !found) 
                {
                        next_row = row + move[dir].vert;
                        next_col = col + move[dir].horiz;

                        if(next_row == EXIT_ROW && next_col == EXIT_COL)
                        {
                                found = TRUE;
                        }
                        else if(!maze[next_row][next_col])
                        {
                                maze[next_row][next_col] = 1;
                                position.row = row;
                                position.col = col;
                                position.dir = ++dir;
                                add(&top, position);
                                row = next_row;
                                col = next_col;
                                dir = 0;
                        }
                        else ++dir;
                }
        }

        if(found)
        {
                printf("The path is:\\n");
                printf(" row col\\n");
                for(i = 0; i<=top; i++)
                {
                          printf(" <%3d,%3d> ", stack[i].row, stack[i].col);

                        for (j=0; j<4; j++)
                        {
                                if (stack[i+1].row - stack[i].row == move[j].horiz && stack[i+1].col - stack[i].col == move[j].vert)
                                {
                                        mark[stack[i].row ][stack[i].col ] = j + 2  + \'0\';     
                                }
                        }
                        if((i+1)%6 == 0) printf("\\n");
                }

                printf(" <%3d,%3d> ", row, col);
                printf(" <%3d,%3d>\\n", EXIT_ROW, EXIT_COL);
  
                for (j=0; j<4; j++)
                {
                        if (row - stack[i-1].row == move[j].horiz && col - stack[i-1].col == move[j].vert)
                        {
                                mark[stack[top].row ][stack[top].col ] = j + 2+ \'0\';
                        }
                        if (EXIT_ROW - row == move[j].horiz && EXIT_COL - col == move[j].vert)
                        {    
                                mark[row][col] = j + 2+ \'0\';   
                        }
                }
        
                for(i=0; i<ROW_SIZE+1; i++)
                {
                        for (j=0; j<COL_SIZE+1; j++)
                        {
                                switch (mark[i][j])
                                {
                                           case \'2\':
                                            mark[i][j] = \'>\';
                                            break;
                                           case \'3\':
                                            mark[i][j] = \'<\';
                                            break;
                                           case \'4\':
                                            mark[i][j] = \'V\';
                                            break;
                                           case \'5\':
                                            mark[i][j] = \'^\';
                                            break;
                                }
                        }
                }
                
                mark[EXIT_ROW][EXIT_COL] = \'F\';
        
         }
         else printf(" The maze does not have a path\\n");
        
}
        
void add(int *top, element item)
{
        if(*top >= MAX_STACK_SIZE-1)
        {
                stack_full();
                return;
        }
        stack[++(*top)] = item;
}

element del(int *top)
{
        if(*top == -1)
        return stack_empty();
        return stack[(*top)--];
}

void stack_full()
{
        fprintf(stderr, "Stack is full !! \\n");
}

element stack_empty()
{
        element item;
        item.col = -1;
        item.dir = -1;
        item.row = -1;
        fprintf(stderr,"Stack is empty !! \\n");
        return item;
}

횽들 미로찾기소스인데

여기서 이걸 최단경로로 찾아가는걸로바꿀려고하는데

장애물이 하나도없을시 ㄴ이나 ㄱ이 가장 최단경로인데

돌리면 ㄹ로 빙빙돌아서가네 

이런거 어떻게 막아줘야되 ㅜ?

부탁해형님들 도와줘

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 기 세보여도 실제로는 멘탈 약할 것 같은 스타는? 운영자 24/11/04 - -
281930 와, 진짜 C언어 [7] 카레맛카레갤로그로 이동합니다. 11.10.18 138 0
281927 님들 그래도 불펌한거는 디게 기분 나쁘지 않나염.. [1] 일광면(119.198) 11.10.18 37 0
281926 nc 소프트 직무 역량 시험 후기 'ㅅ' [3] 1234(110.11) 11.10.18 297 0
281925 오른쪽 마우스 클릭 막는거 쉽게 없앨 수 있긴함 [5] Hello World갤로그로 이동합니다. 11.10.18 137 0
281922 비주얼베이직으로 계산기 만드는데 궁금한게 있어 형들 [24] 가르쳐줘요(210.110) 11.10.18 251 0
281921 오른쪽 마우스 클릭 막는거 존나 역겹지 않냐? [12] Hello World갤로그로 이동합니다. 11.10.18 106 0
281920 꼬꼬월드님 정말!!!! [1] Sayrin갤로그로 이동합니다. 11.10.18 43 0
281919 레알 오른쪽 마우스, 드래그 차단하는거 왜 하는거냐? [5] Hello World갤로그로 이동합니다. 11.10.18 89 0
281918 public 은 왜 적는거야!!!!!! [4] Sayrin갤로그로 이동합니다. 11.10.18 73 0
281917 학부생의 성서 dot(125.128) 11.10.18 91 0
281916 사례있음)정말 급한데..Curl 프로그램 하나만 짜주실분계신가요? [3] 맥맥(211.178) 11.10.18 76 0
281915 프로그래밍갤 횽들 엑셀 매크로좀 도와줘 ㅜㅜ [3] EXEX(211.247) 11.10.18 85 0
281913 밑에 직딩이면 여자 막 만나냐고? [7] 전간디갤로그로 이동합니다. 11.10.18 112 0
281910 83년생 횽아들에게 선물하는 짤방.gif [4] 꼬꼬월드갤로그로 이동합니다. 11.10.18 101 0
281909 NCIS 보는데 로하로하알로하갤로그로 이동합니다. 11.10.18 30 0
281908 siri고 나발이고 [5] y녀6디리(220.118) 11.10.18 73 0
281907 요즘 정보 보안쪽으로 게속 관심이 간다 [5] 1(125.135) 11.10.18 115 0
281905 프갤러들은 멀티 코어임? [1] 로하로하알로하갤로그로 이동합니다. 11.10.18 47 0
281904 횽님들 웹관련 질문좀 [10] 횽들질문점여(116.39) 11.10.18 82 0
281903 게임만들기 취미로도 할수있나요? [9] ㅁㄴㅇ(175.197) 11.10.18 115 0
281902 캐꼬횽 여자랑 해보고 싶은게 프로젝트라면? [1] 534F444D61737465갤로그로 이동합니다. 11.10.18 40 0
281901 가상현실은 힘들거 같고 증강현실이 좀 더 가깝지 않을까? [9] 전간디갤로그로 이동합니다. 11.10.18 70 0
281899 그럼 오나홀이랑 가상현실이랑 [1] Adelposs갤로그로 이동합니다. 11.10.18 57 0
281898 오나홀은 큰 의미가 되지 않는거 같은데.. [1] 534F444D61737465갤로그로 이동합니다. 11.10.18 36 0
281897 이건 밑에거랑 상관없는 퀴즈 [1] 전간디갤로그로 이동합니다. 11.10.18 26 0
281896 가상한현실만 나온다면 [7] Adelposs갤로그로 이동합니다. 11.10.18 75 0
281895 말끊기 신공 보려면 뭐 다운받아야 되냐 [3] 분당살람갤로그로 이동합니다. 11.10.18 57 0
281894 직딩횽들은 막 여자도 만나고 그래요? 일광면(119.198) 11.10.18 27 0
281893 나중에 4차원 나오면 어카냐 [2] 로하로하알로하갤로그로 이동합니다. 11.10.18 41 0
281892 진짜 프로그레머는 오줌쌀때도 오줌의 방향을 x, y,z 로계산하면서 쌀듯 [2] Stan(110.174) 11.10.18 92 0
281891 나도 질문을 올리고 싶은데 올릴수가 없다 [4] 전간디갤로그로 이동합니다. 11.10.18 50 0
281890 부탁이야 형들!! 오픈지엘 이것좀 해결해줘! 오픈지엘제라(121.170) 11.10.18 51 0
281889 형들 UDK 그림자 질문 닥스3세갤로그로 이동합니다. 11.10.18 77 0
281887 그러고보니 여기 디씨에 일하는 사람중에도 [6] 전간디갤로그로 이동합니다. 11.10.18 79 0
281886 c#에서 네임스페이스는 [1] Sayrin갤로그로 이동합니다. 11.10.18 43 0
281885 엘빈 토플러의 말 [1] 분당살람갤로그로 이동합니다. 11.10.18 32 0
281884 C# 에서 City 이건 뭐야?? [9] Sayrin갤로그로 이동합니다. 11.10.18 61 0
281883 횽들 마이크로로 이 프로그램 좀 만들어주세요..ㅜㅜ 모모씨(1.11) 11.10.18 31 0
281882 전간디님이 일찍 퇴근을 시도합니다 전간디갤로그로 이동합니다. 11.10.18 31 0
281881 형들ㅋㅋㅋㅋ 나 갑자기 6.0에서 한글이 안써졐ㅋㅋ 없쥐갤로그로 이동합니다. 11.10.18 32 0
281880 증감연산자 하나만 알려줘 [1] 질문하나(203.237) 11.10.18 48 0
281879 책에 있는 그대로 배껴써도 에러나면 어떡하자는거지? [2] dd(59.9) 11.10.18 46 0
281878 7에서 비주얼 베이직 안댐? [2] 1(125.135) 11.10.18 48 0
281877 batch 파일로 폴더 to 폴더 내용물 카피하는방법.txt [10] Stan(110.174) 11.10.18 162 0
281875 windows 계열 콘솔창 병신같음 [1] monoless갤로그로 이동합니다. 11.10.18 58 0
281872 ㅎㅎ 연락도 없던 녀석들이 시험기간만 되면 Adelposs갤로그로 이동합니다. 11.10.18 56 0
281871 뭐 C질문이없다고? [1] 뻘찔죶중딩갤로그로 이동합니다. 11.10.18 37 0
281870 아옼ㅋㅋ 시험치고 나니까 괜시리 우울해지네여. [1] 좀따4학년.(116.121) 11.10.18 33 0
281866 안녕 형들 여기 오토핫키 잘아는 형들 많겠죠? [6] 읭읭(183.105) 11.10.18 108 0
281862 열혈강의 파이썬 프로그래밍인가... 그거가지고 계신횽있나요? UPX갤로그로 이동합니다. 11.10.18 48 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2