알고리즘/BOJ

백준 14926번 Not Equal

꾸준함. 2018. 5. 1. 00:18

문제 링크입니다: https://www.acmicpc.net/problem/14926


"한 줄 표기법에 최소로 필요한 "!="의 개수인 C(N, 2)는 Vertex가 N개인 완전 그래프의 Edge의 개수와 동일함을 고려해 보라." 힌트를 보고 아래와 같이 코드를 짰습니다.

이미 방문한 간선은 다시 지나가지 않고 해당 정점에서 더 이상 이을 간선이 없다면 이전 정점으로 돌아와 간선을 이어가도록 했습니다!


*N은 홀수일 때만 가능합니다!



#include <iostream>

using namespace std;

 

const int MAX = 500 + 1;

 

int N;

//힌트: 한 줄 표기법에 최소로 필요한 "!="의 개수인 C(N,2)

//Vertex N개인 완전 그래프의 Edge의 개수와 동일함

int edges[MAX][MAX]; //간선

int crossed[MAX][MAX]; //간선 지나갔는지 여부

 

void printVertex(void)

{

        int curVertex = 0;//현재 정점

                                            //마지막 간선은 항상 마지막 정점에서 1번 정점

        crossed[1][N] = crossed[N][1] = true;

        //1부터 N까지 모든 정점 지나는 간선: (N*(N-1)/2)

        for (int i = 0; i < (N * (N - 1) / 2); i++)

        {

                 //모든 정점을 훑어본다

                 for (int vertex = 1; vertex <= N; vertex++)

                 {

                         //정점이 자기 자신이거나 이미 지나간 간선일 경우

                         if (vertex == curVertex || crossed[curVertex][vertex])

                                 continue;

                         //간선 지나갔다고 표시

                         crossed[curVertex][vertex] = crossed[vertex][curVertex] = true;

                         curVertex = vertex;

                         break;

                 }

                 cout << "a" << curVertex << " ";

        }

        //마지막 간선은 마지막 정점에서 1번 정점이므로 a1으로 끝

        cout << "a1" << endl;

}

 

int main(void)

{

        cin >> N;

 

        printVertex();

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

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

백준 1004번 어린 왕자  (0) 2018.05.01
백준 1002번 터렛  (0) 2018.05.01
백준 1085번 직사각형에서 탈출  (0) 2018.04.30
백준 2178번 미로 탐색  (2) 2018.04.29
백준 11509번 풍선 맞추기  (0) 2018.04.29