회원가입
로그인
Toggle navigation
문제
문제
전체 문제
문제 출처
단계별로 풀어보기
알고리즘 분류
새로 추가된 문제
새로 추가된 영어 문제
새로 추가된 문제 풀이
문제 순위
문제
푼 사람이 1명인 문제
아무도 못 푼 문제
최근 제출된 문제
최근 풀린 문제
랜덤
출처
ACM-ICPC
Olympiad
한국정보올림피아드
한국정보올림피아드시․도지역본선
전국 대학생 프로그래밍 대회 동아리 연합
대학교 대회
카카오 코드 페스티벌
Coder's High
ACM-ICPC
Regionals
World Finals
Korea Regional
Africa and the Middle East Regionals
Europe Regionals
Latin America Regionals
North America Regionals
South Pacific Regionals
문제집
대회
1
채점 현황
랭킹
게시판
그룹
블로그
강의
N
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
글쓰기
대회에서 제공한 tc는 다 잘나오는데 왜 런타임에러가 뜰까요
5427번 - 불
2013109004
2년 전
0
진짜 요새 푸는것마다 런타임에러나오고 스트레스 장난아니네요...
#include <stdio.h> int n, m; int map[1001][1001]; int firemap[1001][1001]; int exit[1001][1001]; int q[2000050][2]; int enq = -1, outq = -1; int person_hang, person_ryol; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; int min = 999999; int qes; int main(void) { scanf("%d", &qes); for (int k = 0; k < qes; k++) { min = 999999; enq = -1, outq = -1; scanf("%d%d", &m, &n); getchar(); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { char a; scanf("%c", &a); if (a == '#') map[i][j] = 8; //벽 if (a == '*') { map[i][j] = 5; q[++enq][0] = i, q[enq][1] = j; firemap[i][j] = 1; } //불 if (a == '@') { map[i][j] = 1; person_hang = i, person_ryol = j; } //사람 } getchar(); } //불 먼저 퍼트려 놓기 while (enq != outq) { int hang = q[++outq][0]; int ryol = q[outq][1]; for (int i = 0; i < 4; i++) { if (hang + dx[i] >= 0 && hang + dx[i] < n && ryol + dy[i] >= 0 && ryol + dy[i] < m) { if (map[hang + dx[i]][ryol + dy[i]] != 8 && firemap[hang + dx[i]][ryol + dy[i]] == 0) { firemap[hang + dx[i]][ryol + dy[i]] = firemap[hang][ryol] + 1; q[++enq][0] = hang + dx[i]; q[enq][1] = ryol + dy[i]; } } } } //사람 탈출! enq = -1, outq = -1; q[++enq][0] = person_hang; q[enq][1] = person_ryol; exit[person_hang][person_ryol] = 1; while (enq != outq) { int hang = q[++outq][0]; int ryol = q[outq][1]; for (int i = 0; i < n; i++) { if (hang + dx[i] >= 0 && hang + dx[i] < n&& ryol + dy[i] >= 0 && ryol + dy[i] < m && exit[hang + dx[i]][ryol + dy[i]] == 0) { if (map[hang + dx[i]][ryol + dy[i]] != 8 && firemap[hang + dx[i]][ryol + dy[i]] > exit[hang][ryol] + 1) { exit[hang + dx[i]][ryol + dy[i]] = exit[hang][ryol] + 1; q[++enq][0] = hang + dx[i]; q[enq][1] = ryol + dy[i]; } else if (firemap[hang + dx[i]][ryol + dy[i]] == 0 && map[hang+dx[i]][ryol+dy[i]] != 8) { exit[hang + dx[i]][ryol + dy[i]] = exit[hang][ryol] + 1; q[++enq][0] = hang + dx[i]; q[enq][1] = ryol + dy[i]; } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (i == 0 || j == 0 || i == n - 1 || j == m - 1) { if (exit[i][j] != 0 && min > exit[i][j]) min = exit[i][j]; } map[i][j] = 0; firemap[i][j] = 0; exit[i][j] = 0; } } if (min != 999999) { printf("%d\n", min); } else { printf("IMPOSSIBLE\n"); } } return 0; }
댓글을 작성하려면
로그인
해야 합니다.
2013109004 2년 전
진짜 요새 푸는것마다 런타임에러나오고 스트레스 장난아니네요...