강의로 돌아가기
이혜빈

무엇이 잘못되었는지 모르겠습니다....

저는 입력받은 벡터에 대해서 값이 1일 때 DFS를 해주고, DFS의 수가 네트워크의 수라고 생각했습니다.
문제에서 오픈된 테스트 케이스에 대해서는 맞는 답이 나오는데, 접근이 잘못되었는지 다른 테스트 케이스에서는 답이 틀립니다.
혹시 반례가 있다면 반례 좀 알려주세요...

작성중인 코드―solution.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <string>
#include <vector>

using namespace std;

const int MAX= 210;

bool visited[MAX][MAX]={false, };
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int dfs_num=0;
int n;
int m=0;
vector<vector<int>> computers;

void DFS(int r, int x, int y, vector<vector<int>> computers, bool visited[MAX][MAX]){
    visited[y][x]=true;

    // printf("x: %d y: %d computers: %d\n", x, y, computers[y][x]);
    for(int i=0;i<4;i++){
        int new_y=y+dy[i]; int new_x=x+dx[i];
        if(new_x>-1 && new_y > -1 && new_x <r && new_y < r && visited[new_y][new_x]==false && computers[new_y][new_x]==1){
            visited[new_y][new_x]=true;

            DFS(r, new_y, new_x, computers, visited);
        }
    }
}

int solution(int n, vector<vector<int>> computers) {
    int num=0;
    int answer = 0; //network number
    m=n;
     for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(computers[i][j]==1 && visited[j][i]==false){
                // printf("11111111111\n");
                answer++;
                visited[j][i]=true;
                DFS(m, j, i, computers, visited);
            }
        }
     }


    printf("%d", answer);
    return answer;
}
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.