제민

BFS(5) - 확장 게임, 등... 본문

코테연습일지/그래프 이론

BFS(5) - 확장 게임, 등...

jemin0619 2024. 2. 6. 14:46

이제 0x09강 BFS 문제집을 다 풀어가네요... 이제 좀 감이 잡히는 것 같습니다


https://www.acmicpc.net/problem/16920

 

16920번: 확장 게임

구사과와 친구들이 확장 게임을 하려고 한다. 이 게임은 크기가 N×M인 격자판 위에서 진행되며, 각 칸은 비어있거나 막혀있다. 각 플레이어는 하나 이상의 성을 가지고 있고, 이 성도 격자판 위

www.acmicpc.net

코드를 다 짜고 테스트케이스를 보다보니 좀 이상한 부분이 있었다. 그래서 질문 게시판을 살펴보았는데 문제의 표현이 애매해서 코드를 잘못 짠 것을 깨닫고 다시 짰다. 큐나 다른 자료형에서도 [10] 같은 기호를 활용할 수 있다는 것을 배웠다.

 

https://www.acmicpc.net/board/view/89992

 

글 읽기 - 문제 지문이 잘못되었습니다. 수정 요청합니다.

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

더보기
#include <bits/stdc++.h>
using namespace std;
int n,m,player;
int s[12];
int ans[12];
int board[1003][1003];
int vis[1003][1003];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
queue<tuple<int,int,int>> Q[10];

int main() {
    cin>>n>>m>>player;
    for(int i=1;i<=player;i++){
        cin>>s[i];
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
        	char temp; cin>>temp;
        	if(temp=='.') board[i][j]=1;
            else if(temp=='#') board[i][j]=0;
            else{
            	board[i][j]=0;
            	vis[i][j]=true;
            	Q[temp-'0'].push(make_tuple(i,j,0));
            	ans[temp-'0']++;
			}
        }
    }

    while(1){
    	bool isExtend=false;
    	for(int p=1;p<=player;p++){
    		queue<tuple<int,int,int>> nxtq;
    		while(!Q[p].empty()){
    			auto cur = Q[p].front(); Q[p].pop();
    			int curY,curX,cnt;
    			tie(curY,curX,cnt)=cur;
    			
    			//주어진 횟수만큼 bfs를 했으면 
    			if(cnt>=s[p]){
    				nxtq.push(make_tuple(curY,curX,0));
    				continue;
				}
    			
    			for(int dir=0;dir<4;dir++){
    				int ny=curY+dy[dir];
    				int nx=curX+dx[dir];
    				if(nx<0||ny<0||nx>=m||ny>=n) continue;
    				if(!board[ny][nx] || vis[ny][nx]) continue;
    				Q[p].push(make_tuple(ny,nx,cnt+1));
    				vis[ny][nx]=true; ans[p]++;
    				isExtend=true;
				}
			}
			Q[p]=nxtq;
		}
		if(!isExtend) break;
	}
    
    for(int i=1;i<=player;i++) cout<<ans[i]<<' ';
    return 0;
}

https://www.acmicpc.net/problem/11967

 

11967번: 불켜기

(1, 1)방에 있는 스위치로 (1, 2)방과 (1, 3)방의 불을 켤 수 있다. 그리고 (1, 3)으로 걸어가서 (2, 1)방의 불을 켤 수 있다. (2, 1)방에서는 다시 (2, 2)방의 불을 켤 수 있다. (2, 3)방은 어두워서 갈 수 없으

www.acmicpc.net

https://www.acmicpc.net/problem/9466

 

9466번: 텀 프로젝트

이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을

www.acmicpc.net

https://www.acmicpc.net/problem/9328

 

9328번: 열쇠

상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가

www.acmicpc.net

 

지금 풀기엔 좀 힘들어서 나중에 정리하기로...

'코테연습일지 > 그래프 이론' 카테고리의 다른 글

17141 연구소 2  (0) 2024.02.07
14502 연구소  (0) 2024.02.07
BFS(4) - 숨바꼭질  (0) 2024.02.05
BFS(3) - 벽 부수고 이동하기 등...  (0) 2024.01.29
BFS(2) - 토마토, 불, 상범 빌딩, 빙산  (0) 2024.01.28