AD

C10_P14

Broadcaster 꾸닝
2018-11-28 21:42:31 144 0 2

//술취한 영구벌레가 모든 타일을 지나갔을때의 이동횟수 구하기

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define SIZE 21

int x = SIZE / 2, y = SIZE / 2;

int cnt = 0;


//전체타일 검사하는 함수

int is_tile_full(int t[][SIZE]) {//참1 거짓0

    for (int i = 0; i < SIZE; ++i) {

        for (int j = 0; j < SIZE; ++j) {

            if (t[i][j] == 0)

                return 0;

        }

    }

    return 1;

}


//이동하는 함수 : 타일 위치를 받아서 1로바꾸고 타일위치 반환

void moving(int t[][SIZE]) {

    int n = rand() % 8;

    // t[x][y];

    //if (x < SIZE && x > 0 && y > 0 && y < SIZE) {//타일 안에서

    //case 0: if(y!=0){t[x][y++]; break;}else break;

    switch (n) {

    case 0:

        if (y < SIZE - 1) {

            t[x][y++] = 1;

            cnt++;

        }

        break;

    case 1:

        if (x < SIZE - 1 && y < SIZE - 1) {

            t[x++][y++] = 1;

            cnt++;

        }

        break;

    case 2:

        if (x < SIZE - 1) {

            t[x++][y] = 1;

            cnt++;

        }

        break;

    case 3:

        if (x < SIZE - 1 && y > 0) {

            t[x++][y--] = 1;

            cnt++;

        }

        break;

    case 4:

        if (y > 0) {

            t[x][y--] = 1;

            cnt++;

        }

        break;

    case 5:

        if (x > 0 && y > 0) {

            t[x--][y--] = 1;

            cnt++;

        }

        break;

    case 6:

        if (x > 0) {

            t[x--][y] = 1;

            cnt++;

        }

        break;

    case 7:

        if (x > 0 && y < SIZE - 1) {

            t[x--][y++] = 1;

            cnt++;

        }

        break;

    default:

        break;

    }

}


int main(void) {

    int tile[SIZE][SIZE] = { 0 };


    srand((unsigned)time(NULL));


    tile[x][y] = 1;



    while (is_tile_full(tile) == 0) {//모든타일을 돌았는지 검사

        if (cnt <= 100000) {//최대한도 제어

            moving(tile);//랜덤으로 움직이기

            //printf("(%d, %d)\n", x,y);

        }

        else {

            printf("한도횟수 초과!\n");

            return 0;

        }

    }

    printf("영구벌레는 %d번 이동하여 모든 타일을 지나갔습니다.\n", cnt);

}

후원댓글 2
댓글 2개  
이전 댓글 더 보기
TWIP 잔액: 확인중
▲윗글 이것은 문제입니다 석동이
▼아랫글 제휴도 된겨?! 이올스
3
12-05
1
12-03
4
11-29
3
11-29
0
님님 집에서 밥도해드심? [6]
애기곤듀이은주
11-29
0
내일 살 것 [1]
이올스
11-28
0
11-28
»
C10_P14 [2]
Broadcaster 꾸닝
11-28
0
제휴도 된겨?! [1]
이올스
11-28
3
11-27
1
첫빠따! [1]
이올스
11-27
인기글 글 쓰기