본문 바로가기
알고리즘!/Graph

[C] 21736: 헌내기는 친구가 필요해

by soeayun 2023. 8. 23.

간단하게 풀 수 있는 문제였다.

X가 벽이고 O로 지나갈 수 있으며 P를 만날때 people++을 해주면 된다.

그리고 결국 그래프를 순회만 하면 되기 때문에 Depth-first를 이용해 풀어주었다

 

#include <stdio.h>
#include <string.h>

char graph[601][601];
int visit[601][601];
int people=0;
int x_coordinate[4]={0,0,1,-1};
int y_coordinate[4]={1,-1,0,0};

void dfs(int x,int y,int x_max,int y_max)
{
  for(int i=0;i<4;i++)
    {
      int nx=x+x_coordinate[i];
      int ny=y+y_coordinate[i];
      if(nx<0||ny<0||nx>x_max-1||ny>y_max-1) //범위에서 벗어남
        continue;
      if(graph[ny][nx]=='X'|| visit[ny][nx]==1) //벽이 있거나 이미 지나간 공간
        continue;
      
      if(graph[ny][nx]=='P') //사람을 만났을 때 people++
        people++;
      visit[ny][nx]=1;
      dfs(nx,ny,x_max,y_max);
      
    }
}

int main(void)
  {
    int y,x,y_cd,x_cd;
    scanf("%d %d",&y,&x);
    for(int j=0;j<y;j++)
      {
        scanf("%s",graph[j]);
        for(int i=0;i<x;i++)
          {
            if(graph[j][i]=='I')
            {
              x_cd=i,y_cd=j;
            }
          }
      }
    visit[y_cd][x_cd]=1;
    dfs(x_cd,y_cd,x,y);
    //printf("people: %d\n",people);
    if(people!=0)
      printf("%d",people);
    else
      printf("TT");
  }

'알고리즘! > Graph' 카테고리의 다른 글

[C] 1697: 숨바꼭질  (0) 2023.08.23
[C] 11403: 경로 찾기  (0) 2023.08.23
[C] 14940: 쉬운 최단거리  (0) 2023.08.21
[C] 11724: 연결 요소의 개수  (0) 2023.08.06
[C] 7569: 토마토  (0) 2023.08.04