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

Biểu đồ kết nối


Đồ thị vô hướng được cho là đồ thị hai đường nối, nếu có hai đường đi đến đỉnh giữa hai đỉnh bất kỳ. Nói cách khác, chúng ta có thể nói rằng có một chu trình giữa hai đỉnh bất kỳ.

Biểu đồ kết nối

Chúng ta có thể nói rằng đồ thị G là đồ thị hai liên kết nếu nó được liên thông và không có điểm khớp hoặc đỉnh cắt nào trong đồ thị.

Để giải quyết vấn đề này, chúng ta sẽ sử dụng DFS traversal. Sử dụng DFS, chúng tôi sẽ cố gắng tìm xem có bất kỳ điểm khớp nối nào hiện diện hay không. Chúng tôi cũng kiểm tra xem tất cả các đỉnh có được truy cập bởi DFS hay không, nếu không, chúng tôi có thể nói rằng đồ thị không được kết nối.

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

 Đầu vào:Ma trận kề của đồ thị. 1 1 1 01 0 1 0 01 1 0 0 11 0 0 0 10 0 1 1 0 Đầu ra:Đồ thị là một đồ thị hai mặt. 

Thuật toán

isArticulation (bắt đầu, truy cập, đĩa, thấp, cấp cao)

Đầu vào: Đỉnh bắt đầu, mảng đã thăm để đánh dấu khi một nút được truy cập, đĩa sẽ lưu giữ thời gian khám phá của đỉnh và thấp sẽ lưu giữ thông tin về các cây con. Đỉnh cha sẽ giữ đỉnh cha mẹ của đỉnh hiện tại.

Đầu ra - Đúng nếu tìm thấy bất kỳ điểm khớp nối nào.

 Begin time:=0 // giá trị của thời gian sẽ không được khởi tạo cho các lệnh gọi hàm tiếp theo dfsChild:=0 đánh dấu bắt đầu là đĩa đã truy cập [start]:=time + 1 và low [start]:=time + 1 time:=time + 1 cho tất cả đỉnh v trong đồ thị G, nếu có cạnh giữa (start, v), thì nếu v được truy cập, sau đó tăng dfsChild parent [v]:=start if isArticulation (v, đã thăm , disk, low, parent) là true, sau đó trả về ture low [start]:=tối thiểu của low [start] và low [v] nếu parent [start] là φ AND dfsChild> 1, sau đó trả về true nếu parent [start] là φ AND low [v]> =disk [start], sau đó trả về true else nếu v không phải là cha của start, thì low [start]:=Minimum of low [start] và disk [v] done trả về falseEnd  

isBiconnected (đồ thị)

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

Đầu ra - Đúng nếu biểu đồ được kết nối hai chiều.

 Begin ban đầu thiết lập tất cả các đỉnh là không được thăm và cha của mỗi đỉnh là φ nếu isArticulation (0, đã thăm, đĩa, thấp, cha) =true, sau đó trả về false cho mỗi nút i của biểu đồ, thực hiện nếu tôi không được thăm , sau đó trả về false, hoàn thành trả về trueEnd 

Ví dụ

 #include  #define NODE 5 sử dụng không gian tên std; int graph [NODE] [NODE] ={{0, 1, 1, 1, 0}, {1, 0, 1, 0, 0}, { 1, 1, 0, 0, 0}, {1, 0, 0, 0, 1}, {0, 0, 0, 1, 0}}; int min (int a, int b) {return (a  1) {// khi u có 2 hoặc nhiều hơn con thì trả về true; } if (parent [start]! =-1 &&low [v]> =disk [start]) return true; } else if (v! =parent [start]) // cập nhật mức thấp bắt đầu cho lần gọi trước low [start] =min (low [start], disk [v]); }} return false;} bool isBiConnected () {bool * vis =new bool [NODE]; int * disk =new int [NODE]; int * low =new int [NODE]; int * parent =new int [NODE]; for (int i =0; i  

Đầu ra

 Biểu đồ là một biểu đồ được kết nối hai chiều.