Computer >> Máy Tính >  >> Lập trình >> Lập trình

Kiểm tra Đồ thị Sao


Một đồ thị đã cho; chúng ta phải kiểm tra biểu đồ đã cho có phải là biểu đồ hình sao hay không.

Bằng cách duyệt qua đồ thị, chúng ta phải tìm số đỉnh có bậc một và số đỉnh có bậc là n-1. (Ở đây n là số đỉnh của đồ thị đã cho). Khi số đỉnh có bậc 1 là n-1 và số đỉnh có bậc (n-1) là một thì đó là đồ thị hình sao.

Kiểm tra Đồ thị Sao

Đầu vào và Đầu ra

Input:
The adjacency matrix:
0 1 1 1
1 0 0 0
1 0 0 0
1 0 0 0

Output:
It is a star graph.

Thuật toán

checkStarGraph(graph)

Đầu vào: Biểu đồ đã cho.

Đầu ra: Đúng khi biểu đồ là biểu đồ hình sao.

Begin
   degOneVert := 0 and degNminOneGraph := 0
   if graph has only one vertex, then
      return true, if there is no self-loop
   else if graph has two vertices, then
      return true if there is only one vertex between two vertices
   else
      for all vertices i in the graph, do
         degree := 0
         for all vertices j, adjacent with i, do
            degree := degree + 1
         done
         if degree = 1, then
            degOneVert := degOneVert + 1
         else if degree = n-1, then
            degNminOneGraph := degNminOneGraph + 1
      done

   if degOneVert = n-1, and degNminOneGraph = 1, then
      return true
   otherwise return false
End

Ví dụ

#include<iostream>
#define NODE 4
using namespace std;

int graph[NODE][NODE] = {
   {0, 1, 1, 1},
   {1, 0, 0, 0},
   {1, 0, 0, 0},
   {1, 0, 0, 0}
};

bool checkStarGraph() {
   int degOneVert = 0, degVert = 0;    //initially vertex with degree 1 and with degree n - 1 are 0
   if (NODE == 1)    //when there is only one node
      return (graph[0][0] == 0);

   if (NODE == 2)  
      return (graph[0][0] == 0 && graph[0][1] == 1 && graph[1][0] == 1 && graph[1][1] == 0 );

   for (int i = 0; i < NODE; i++) {    //for graph more than 2
      int degree = 0;
      for (int j = 0; j < NODE; j++)    //count degree for vertex i
         if (graph[i][j])
            degree++;
      if (degree == 1)
         degOneVert++;
      else if (degree == NODE-1)
         degVert++;
   }
   //when only vertex of degree n-1, and all other vertex of degree 1, it is a star graph
   return (degOneVert == (NODE-1) && degVert == 1);
}

int main() {
   if(checkStarGraph())
      cout << "It is a star graph.";
   else
     cout << "It is not a star graph.";
}

Đầu ra

It is a star graph.