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

C++에서 모든 꼭짓점의 주어진 각도에서 그래프를 구성합니다.

<시간/>

정점 목록이 있고 그 차수가 주어진다고 가정합니다. 해당 차수 시퀀스에서 하나의 무방향 그래프를 생성해야 합니다. 루프 또는 다중 모서리는 포함되지 않습니다. 따라서 차수 시퀀스가 ​​[2, 2, 1, 1]과 같으면 그래프는 다음과 같을 수 있습니다.

C++에서 모든 꼭짓점의 주어진 각도에서 그래프를 구성합니다.

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

  • 그래프를 저장할 인접 행렬 adj 정의

  • 각 정점 i에 대해 수행

    • 유효한 각 정점 j에 대해, 그리고 i 옆에

      • 꼭짓점 i와 j의 차수가 0보다 크면 연결하십시오.

  • 매트릭스를 표시합니다.

예시

#include <iostream>
#include <iomanip>
using namespace std;
void generateGraph(int vert_degree[], int n) {
   int adj_mat[n][n];
   for(int i = 0; i<n; i++){
      for(int j = 0; j < n; j++){
         adj_mat[i][j] = 0;
      }
   }
   for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
         if (vert_degree[i] > 0 && vert_degree[j] > 0) {
            vert_degree[i]--; vert_degree[j]--;
            adj_mat[i][j] = adj_mat[j][i] = 1;
         }
      }
   }
   cout << endl << setw(3) << " ";
   for (int i = 0; i < n; i++)
      cout << setw(3) << "(" << i << ")";
      cout << endl << endl;
   for (int i = 0; i < n; i++) {
      cout << setw(4) << "(" << i << ")";
   for (int j = 0; j < n; j++)
      cout << setw(5) << adj_mat[i][j];
      cout << endl;
   }
}
int main() {
   int vert_degree[] = { 2, 2, 1, 1, 1 };
   int n = sizeof(vert_degree) / sizeof(vert_degree[0]);
   generateGraph(vert_degree, n);
}

출력

      (0)   (1)  (2)  (3)  (4)

(0)    0    1    1    0    0
(1)    1    0    0    1    0
(2)    1    0    0    0    0
(3)    0    1    0    0    0
(4)    0    0    0    0    0