모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    루카쿠쿠님의
    개인페이지입니다
    가입 : 14-10-13
    방문 : 718회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_7141
    작성자 : 루카쿠쿠
    추천 : 0
    조회수 : 4082
    IP : 1.209.***.15
    댓글 : 1개
    등록시간 : 2014/12/15 16:46:30
    http://todayhumor.com/?programmer_7141 모바일
    c언어 미로찾기 A*알고리즘 질문
    옵션
    • 본인삭제금지
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <conio.h>
    #include <time.h>
    #include <math.h>

    #define MAZE_BOARD_HEIGHT 21
    #define MAZE_BOARD_WIDTH 21
    #define POINT_X 4 //보드시작좌표x
    #define POINT_Y 2  //보드시작좌표y

    #define LEFT 75
    #define RIGHT 77
    #define UP 72
    #define DOWN 80
    #define DELAY 100
    #define EXIT 50

    int maze[21][21] = { 0 };
    int closed[21][21] = { 0 };
    int gmat[21][21] = { 0 };
    int expand[21][21] = { -1 };
    int action[21][21] = { -1 };

    void astar(void)
    {
    int start[1][2] = { 6, 3 };
    int delta[4][2] = {{ -1, 0 }, { 0, -1 }, { 1, 0 }, {0,1}};
    int goal[1][2] = { 20, 20 };
    int open[1][5];
    int cost = 1;
    int x, y,i;
    int g,h,f;
    int found, resign = 0;
    int count;
    closed[0][0] = 1;
    x = start[0][0];
    y = start[0][1];
    g = 0;
    h = abs(x - goal[0][0]) + abs(y - goal[0][1]);
    f = g + h;
    count = 0;
    open[0][0] = f;
    open[0][1] = g;
    open[0][2] = h;
    open[0][3] = x;
    open[0][4] = y;

    while (~found && ~resign)
    if (length(open) == 0)
    resign = 1;
    else
    open



    }


    void setCursor(int x, int y)
    {
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    }

    COORD getCursor(void)
    {
    COORD curPoint;
    CONSOLE_SCREEN_BUFFER_INFO pos;
    GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &pos);
    curPoint.X = pos.dwCursorPosition.X;
    curPoint.Y = pos.dwCursorPosition.Y;
    return curPoint;
    }

    void removeCursor(void)
    {
    CONSOLE_CURSOR_INFO cur;
    GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cur);
    cur.bVisible = 0;
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cur);
    }

    void showBoard(void)
    {
    int x, y;
    COORD cur = getCursor();

    srand((unsigned)time(NULL));

    for (x = 0; x<MAZE_BOARD_HEIGHT; x++)
    {
    for (y = 0; y<MAZE_BOARD_WIDTH; y++)
    {
    maze[x][y] = rand() % 2;
    }                              /*미로를 랜덤으로 발생*/
    }
    for (x = 0; x<MAZE_BOARD_HEIGHT; x++)                 /*벽은 모두 1로 채운다*/
    {
    maze[0][x] = 1;
    maze[MAZE_BOARD_WIDTH - 1][x] = 1;
    }
    for (x = 0; x<MAZE_BOARD_HEIGHT; x++)
    {
    maze[x][MAZE_BOARD_WIDTH - 1] = 1;
    maze[x][0] = 1;
    }

    maze[1][1] = 2;                       
    maze[MAZE_BOARD_HEIGHT - 2][MAZE_BOARD_WIDTH - 2] = 3;

    for (y = 0; y<MAZE_BOARD_HEIGHT; y++)
    {
    for (x = 0; x<MAZE_BOARD_WIDTH; x++)
    {
    setCursor(cur.X + (x * 2), cur.Y + y);
    if (maze[y][x] == 1)
    printf("■");
    else if (maze[y][x] == 2)
    printf("@");
    else if (maze[y][x] == 3)
    printf("★");
    else
    printf("□");

    }
    }
    setCursor(cur.X, cur.Y);
    }
    void showCharacter(void)
    {
    COORD cur = getCursor();

    printf("⊙");
    setCursor(cur.X, cur.Y);

    }
    int detect(int x, int y)
    {
    int x1 = 0;
    int y1 = 0;

    // 커서위치얻기
    COORD cur = getCursor();

    // 미로내에서의위치계산
    x1 = cur.X + x;
    y1 = cur.Y + y;
    x1 = x1 / 2 - 2;
    y1 = y1 - 2;

    // 미로밖에있느냐
    if (!((x1 >= 0 && x1 <MAZE_BOARD_WIDTH) && (y1 >= 0 && y1 <MAZE_BOARD_HEIGHT)))
    {
    return 1;
    }

    //배열을넘어가지않는이유
    if (maze[y1][x1] == 1)
    return 1;
    //미션성공
    else if (maze[y1][x1] == 3)
    return EXIT;
    else
    return 0;
    }
    void RemoveCharacter_Set(int x, int y)
    {
    int value = detect(x, y);

    if (value == 0)
    {
    COORD cur = getCursor();

    printf("□");
    setCursor(cur.X + x, cur.Y + y);
    }
    else if (value == EXIT)
    {
    setCursor(10, 15);
    printf("성공");
    system("pause");
    exit(1);
    }
    }


    void character_static(void)
    {
    int kb;
    setCursor(6, 3);  //케릭터시작위치
    while (1)
    {
    while (!_kbhit())
    {
    showCharacter();
    Sleep(DELAY);
    }
    kb = _getch();
    switch (kb)
    {
    case UP:
    RemoveCharacter_Set(0, -1);
    break;
    case DOWN:
    RemoveCharacter_Set(0, 1);
    break;
    case RIGHT:
    RemoveCharacter_Set(2, 0);
    break;
    case LEFT:
    RemoveCharacter_Set(-2, 0);
    break;
    }

    }
    }



    int main()
    {
    removeCursor(); //커서깜박이지우기
    setCursor(POINT_X, POINT_Y); //보드시작좌표
    showBoard(); //미로판보여주기

    character_static(); //케릭터움직이기
    getchar();
    }

    미로를 랜덤하게 만들고 user가 직접 작동하는거는 만들었는데 여기다가 A*알고리즘을 도입해서 로봇이 

    길을 못찾으면 찾을때까지 미로를 계속 생성하고 그것을 토대로 가장 빠른길을 보여주고 싶은데


    3일째 A* 이해할라고해도 도대체가 이해가 안갑니다. f= g+h로 해서 가장 작은 f찾아서 움직이는거 같은데

    c로 구현할라면 g값 백터따로 h값 백터 따로 거기다가 찾았던곳은 closed 시켜서 다시 안가게 만들어야하고(이것도 백터따로)

    골을 찾는 조건도 모르겠고 A*가 이해안가네요 ㅠㅜ A*좀 이해하기 쉬운방법 없을까요 c로? 이해만 하면 코딩해서 h값따라 

    로봇이 움직이게 하는건 할수있을거같은데 A*를 대략적으론 알겠는데 c로 구현하기가 어렵네요.....

    A* c로 구현할라면 어찌해야하나요? 간단한 예제같은거 없을까요 ㅠㅜㅠㅜㅠㅜ


    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    23
    게이밍 데스크탑 vs 노트북 질문 및 상황 설명 [7] 본인삭제금지 루카쿠쿠 17/12/01 16:28 89 1
    22
    [강스포] 그림갈 일본에서발매 10권 내용 [1] 펌글 루카쿠쿠 17/03/23 23:55 60 0
    21
    안녕하세요. 고양이 질문좀 받아주세요 [10] 베스트금지본인삭제금지 루카쿠쿠 16/03/24 20:41 64 2
    19
    주수리는 고통받는다 [2] 루카쿠쿠 15/10/26 22:49 56 0
    18
    2번째 투기장 12승 성공! 루카쿠쿠 15/08/27 22:32 49 0
    17
    페드로 첼시행?! [3] 루카쿠쿠 15/08/19 20:05 126 1
    16
    사적 진짜 양심도 없는 사이코패스 도둑놈 같으니라고 [4] 루카쿠쿠 15/08/19 11:42 188 5
    15
    주마 무슨 볼링공인가 ㅋㅋㅋㅋ [1] 루카쿠쿠 15/08/03 00:47 181 0
    14
    가이드 보는데 벨기에 젊은이들 인성이 휼륭하네요. [47] 루카쿠쿠 15/08/01 13:33 153 15
    13
    드디어 고통의 주술 500승 ㅜㅜ [5] 루카쿠쿠 15/06/10 20:44 86 0
    12
    투기장 처음으로 12승 kiya!!!! [2] 루카쿠쿠 15/06/02 01:05 52 0
    11
    요즘 손놈 전사때문에 게임시간이 너무 길어지네요. [8] 루카쿠쿠 15/05/23 23:52 82 1
    10
    난생처음 탈진전 ㅋ [2] 루카쿠쿠 15/05/11 03:31 68 0
    9
    크퀘)5일된 유저 조언부탁드려요 [7] 루카쿠쿠 15/02/23 16:49 60 0
    8
    결정력없는 꼬마의 가방질문 [3] 루카쿠쿠 15/02/09 01:28 121 0
    7
    여자 대학신입생 핸드백(?) 선물해줄라 하는데 추천좀해주세요. [14] 루카쿠쿠 15/02/09 00:31 88 0
    6
    본삭금) 검은사막 모니터 + 본체 100만원 견적 문의 [4] 루카쿠쿠 15/01/05 23:47 65 0
    5
    컴퓨터 견적 문의 [7] 루카쿠쿠 15/01/02 02:13 77 0
    4
    검은사막 즐거웠습니다. [1] 루카쿠쿠 14/12/27 21:40 147 6
    c언어 미로찾기 A*알고리즘 질문 [1] 루카쿠쿠 14/12/15 16:46 57 0
    2
    7전8기 드디어 ㅠㅜ 이게 무슨일인지 껄껄 [1] 루카쿠쿠 14/11/08 00:52 148 2
    1
    하악하악 fm2015 배송중 [1] 루카쿠쿠 14/11/06 12:57 70 0
    [1]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈