정점 목록이 있고 그 차수가 주어진다고 가정합니다. 해당 차수 시퀀스에서 하나의 무방향 그래프를 생성해야 합니다. 루프 또는 다중 모서리는 포함되지 않습니다. 따라서 차수 시퀀스가 [2, 2, 1, 1]과 같으면 그래프는 다음과 같을 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
그래프를 저장할 인접 행렬 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