회원가입
로그인
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
전체
공지
자유
질문
오타/오역/요청
게시판 공지
홍보
업데이트
글쓰기
런타임에러
9328번 - 열쇠
kfc
2년 전
0
queue 선언을 전역변수로 하면 런타임 에러가 뜨고 bfs함수에 지역변수로 선언하면 성공하는데 차이점이 머죠??
bfs함수가 어차피 queue가 비었을때 끝이나는데 큐가 비어있으면 지역변수로 선언한느거랑 같은거 아닌가요?
#include <stdio.h> #include <queue> using namespace std; int w,h,ans,cnt; char map[105][105]; int visit[105][105]; int key[100]; char str[100]; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; typedef struct point { int x,y; }Point; queue <Point> q; void bfs(int x,int y) { Point p; p.x=x; p.y=y; q.push(p); while(!q.empty()) { int x=q.front().x,y=q.front().y; q.pop(); for(int i=0;i<4;i++) { int nx=x+dx[i],ny=y+dy[i]; if(nx>=0&&nx<h&&ny>=0&&ny<w) { if(map[nx][ny]=='.'&&visit[nx][ny]==0) { visit[nx][ny]=1; Point p2; p2.x=nx; p2.y=ny; q.push(p2); } else if(map[nx][ny]>='a'&&map[nx][ny]<='z'&&visit[nx][ny]==0) { visit[nx][ny]=1; key[map[nx][ny]-'a']=1; map[nx][ny]='.'; cnt++; Point p2; p2.x=nx; p2.y=ny; q.push(p2); } else if(map[nx][ny]>='A'&&map[nx][ny]<='Z'&&visit[nx][ny]==0) { if(key[map[nx][ny]-'A']==1) { visit[nx][ny]=1; map[nx][ny]='.'; Point p2; p2.x=nx; p2.y=ny; q.push(p2); } } else if(map[nx][ny]=='$'&&visit[nx][ny]==0) { visit[nx][ny]=1; map[nx][ny]='.'; Point p2; p2.x=nx; p2.y=ny; q.push(p2); ans++; } } } } } int main(void) { int T; scanf("%d",&T); for(int i=1;i<=T;i++) { scanf("%d %d",&h,&w); for(int j=0;j<h;j++) { scanf("%s",map[j]); } scanf("%s",str); for(int j=0;j<100;j++) { if(str[j]=='\0'||str[j]==0) break; key[str[j]-'a']=1; } while(1) { cnt=0; for(int t=0;t<h;t++) { for(int k=0;k<w;k++) { if(t==0||t==h-1||k==0||k==w-1) { if(map[t][k]=='.') bfs(t,k); else if(map[t][k]>='A'&&map[t][k]<='Z') { if(key[map[t][k]-'A']==1) { map[t][k]='.'; bfs(t,k); } } else if(map[t][k]>='a'&&map[t][k]<='z') { key[map[t][k]-'a']=1; map[t][k]='.'; cnt++; bfs(t,k); } else if(map[t][k]=='$') { map[t][k]='.'; ans++; bfs(t,k); } for(int t=0;t<h;t++) { for(int k=0;k<w;k++) { visit[t][k]=0; } } while(!q.empty()) q.pop(); } } } if(cnt==0) break; } printf("%d\n",ans); ans=0; for(int t=0;t<100;t++) { key[t]=0; str[t]=0; } for(int t=0;t<h;t++) { for(int k=0;k<w;k++) { visit[t][k]=0; map[t][k]=0; } } cnt=0; } return 0; }
댓글을 작성하려면
로그인
해야 합니다.
kfc 2년 전