Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 유명인 찾기

<시간/>

n명의 사람(0에서 n - 1까지 레이블이 지정됨)이 있고 그 중 한 명의 유명인이 있을 수 있다고 가정합니다. 다른 n - 1명의 사람들이 모두 x를 알고 있지만 x는 그들 중 누구도 알지 못할 때 사람 x가 유명인이라고 말할 수 있습니다. 여기서 우리는 유명인이 누구인지 찾거나 연예인이 없는지 확인해야 합니다.

우리는 'A'라는 사람에게 "안녕, A. B를 아십니까?"라는 한 가지 질문만 할 수 있습니다. A가 B를 알고 있는지 여부에 대한 정보를 얻으려면. 우리는 유명인을 찾기 위해 최소한의 질문을 해야 합니다. 그래프라는 입력으로 리스트 목록이 있는데, i번째 사람이 j번째 사람을 알면 graph[i,j] =1, 그렇지 않으면 0입니다.

따라서 입력이 그래프 =[[1,1,0],[0,1,0],[1,1,1]],

와 같은 경우

C++에서 유명인 찾기

0과 2는 모두 그를 알고 있지만 1은 아무도 모르기 때문에 유명인은 1로 레이블이 지정된 사람이므로 출력은 1이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • know() 함수를 정의하면, b,

  • 그래프[a, b]가 참일 때 참을 반환

  • 주요 방법에서 다음을 수행하십시오 -

  • 하나의 스택 정의

  • initialize i :=0의 경우, i

    • i를 st에 삽입

  • 크기가 st> 1인 동안 −

    • x :=st의 최상위 요소

    • st

      에서 요소 삭제
    • y :=st의 최상위 요소

    • st

      에서 요소 삭제
    • know(x, y)가 참이면 -

      • y를 st에 삽입

    • 그렇지 않으면

      • x를 st에 삽입

  • x :=st의 최상위 요소

  • initialize i :=0의 경우, i

    • i가 x와 같으면 -

      • 다음 부분은 무시하고 다음 반복으로 건너뜁니다.

    • know(x, i)가 참이거나 know(i, x)가 거짓이면 -

      • 반환 -1

  • x를 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
class Solution {
   vector<vector<int<> graph;
public:
   Solution(vector<vector<int<> &graph){
      this->graph = graph;
   }
   bool knows(int a, int b){
      return graph[a][b];
   }
   int findCelebrity(int n) {
      stack<int< st;
      for (int i = 0; i < n; i++) {
         st.push(i);
      }
      while (st.size() > 1) {
         int x = st.top();
         st.pop();
         int y = st.top();
         st.pop();
         if (knows(x, y)) {
            st.push(y);
         }
         else {
            st.push(x);
         }
      }
      int x = st.top();
      for (int i = 0; i < n; i++) {
         if (i == x)
            continue;
         if (knows(x, i) || !knows(i, x)) {
            return -1;
         }
      }
      return x;
   }
};
main(){
   vector<vector<int<> v = {{1,1,0},{0,1,0},{1,1,1}};
   Solution ob(v);
   cout << (ob.findCelebrity(3));
}

입력

{{1,1,0},{0,1,0},{1,1,1}}
3

출력

1