1. 程式人生 > >根據圖的度數判斷圖的連通性的Havel-Hakimi定理

根據圖的度數判斷圖的連通性的Havel-Hakimi定理

原定理:

如果給定了n個數a1,a2,……,an,那麼是否有可能是某一個圖結點的度數呢?

為了儘量構成一個連通圖,我們首先考慮其中度數最多的點,為了解決其連線問題,我們考慮兩種情況:

1.連線度數較少的點

2.連線度數較多的點

2方法有一個明顯的好處,就是“儘量儲存多的點",它的作用就是能夠保證之後的數字無論多大,都存在足夠多的點與其相抵消,而且因為是消除大數字的點,也有很大的削弱大數字的效果。

所以方法就是進行遞迴操作。

一下是程式碼:

#include <vector>
using namespace std;

bool cn(vector<int>& vi) {
    if(vi[0] == true) return true;
    for(int i = 1; i < vi.size(); i++) {
        vi[i]--;
        if(v[i] < 0) return false;
    }
    vi.erase(vi.begin(), vi.begin() + 1);
    return cn(vi);
}

bool judge_connect(vector<int> vi) {
    sort(vi.begin(), vi.end());
    return cn(vi);
}
未進行驗證。

相關推薦

根據度數判斷通性Havel-Hakimi定理

原定理: 如果給定了n個數a1,a2,……,an,那麼是否有可能是某一個圖結點的度數呢? 為了儘量構成一個連通圖,我們首先考慮其中度數最多的點,為了解決其連線問題,我們考慮兩種情況: 1.連線度數較少的點 2.連線度數較多的點 2方法有一個明顯的好處,就是“儘量儲存多的點"

Havel-Hakimi定理---通過度數列判斷是否可

post 數列 討論 bsp 2個 HR lan degree ... 0、可圖:一個非負整數組成的序列如果是某個無向圖的度序列,則該序列是可圖的。 1、度序列:Sequence Degree,若把圖G所有頂點的度數排成一個序列,責成該序列為圖G的一個序列。該序列可以是非遞

Havel-Hakimi定理(判斷一個度序列是否可)

1,Havel-Hakimi定理主要用來判定一個給定的序列是否是可圖的。 2,首先介紹一下度序列:若把圖 G 所有頂點的度數排成一個序列 S,則稱 S 為圖 G 的度序列。 3,一個非負整陣列成的

Havel-Hakimi定理(判斷一個序列是否可)

Havel定理描述給定一個非負整數序列{d1,d2,...dn},若存在一個無向圖使得圖中各點的度與此序列一一對應,則稱此序列可圖化。進一步,若圖為簡單圖,則稱此序列可簡單圖化。 可圖化的判定比較簡單:d1+d2+...dn=0(mod2)。關於具體圖的構造,我們可以簡單地

ZOJ 3732 可性判定--Havel-Hakimi定理

題意:給定n個點度數,問是否可以構造一個簡單圖。 思路:Havel-Hakimi定理 : 1.將度數從小到大排序 2.用第一個向後面連續d[1]個點連邊,若點數不夠則不能構造 3.若點數夠,則將每個點度數減1,若出現負值,則不能構造, 4.去掉該點返回步驟一,直到集合中沒有點

Havel-Hakimi定理

可圖(Graphic) 什麼是可圖,那需要先說一下度序列。 度序列是把圖的多有頂點度數排列成一個序列s,則稱s為圖G的度序列。 度序列可以是按照頂點的順序排列,也可以按照遞增、遞減的順序排列。所謂的可圖,是建立在度序列的基礎上的。 序列是可圖的:一個非負整陣列成的有限序列如果是某個無向圖

Toposort Description    給出一個有向判斷中是否存在迴路。 Input:   第1行:輸入的頂點個數N(1 ≤ N≤ 2,500)和C(的邊數,1 ≤ C ≤ 6,20

Toposort Description 給出一個有向圖,判斷圖中是否存在迴路。 Input: 第1行:輸入圖的頂點個數N(1 ≤ N≤ 2,500)和C(圖的邊數,1 ≤ C ≤ 6,200); 第2到C+1行中,第i+1行輸入兩個整數,分別表示第i條邊的起點和終點的編號

Havel-Hakimi定理 hdu2454 / poj1695 Havel-Hakimi定理

tor pan rom havel 介紹 code max 裸題 繼續 Havel-Hakimi定理 當年一度熱門出如今ACM賽場上的算法。 算法定義:

POJ-1659 Frogs' Neighborhood---Havel-Hakimi定理

poj pri HR tdi () pro 建圖 turn blog 題目鏈接: https://vjudge.net/problem/POJ-1659 題目大意: 給定度數列,判斷是否可以建圖 思路: Havel-Hakimi定理 1 #include<iost

POJ 1659 Frogs' Neighborhood (Havel--Hakimi定理

node body i++ urn .html special wid 個數字 mes                   Frogs‘ Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total S

Havel-Hakimi定理的方法來構圖

給定一組非負數字,(數字為節點的度),判斷該組數字能不能構成圖。 Havel-Hakimi定理: 將序列按照從大到小排序之後,從第二個數開始到第一個數的長度+1為止,依次減1。每操作一次,刪掉第一個數字。直到整個陣列被刪完都沒有-1出現。則可圖。 按照這個定理,我們可做的操作如下: 1.排序 2.先

無向通性判斷

        對於一個無向圖的連通性的判斷,我們可以通過讀入的邊對得出鄰接矩陣,然後可以採用Warshall演算法得到可達矩陣,那麼就可以很簡單的判斷圖的連通性,只要所有的點之間都是相互可達的,那麼圖就是連通的,反之則不連通。    

判斷無向通性,鄰接矩陣表示

 在古老的魔獸傳說中,有兩個軍團,一個叫天災,一個叫近衛。在他們所在的地域,有n個隘口,編號為1..n,某些隘口之間是有通道連線的。其中近衛軍團在1號隘口,天災軍團在n號隘口。某一天,天災軍團的領袖巫妖王決定派兵攻打近衛軍團,天災軍團的部隊如此龐大,甚至可以填江過河。但是巫妖王不想付出不必要的代價,他想知道

[]深搜判斷通性

#include<stdio.h> int N, M; int visited[20] = {0}; int G[20][20]; int edge = 0; void DFS(int

通性判斷

判斷圖的連通性,程式目的是為了檢驗一個網路是否為聯通的,如果不連通,會將小的區塊的節點號報出。 #include <iostream> #include <cstdio> #include <vector> #inclu

資料結構之基於的廣度優先搜尋,判斷無向通性

#include <iostream>using namespace std;struct LinkNode{int data;LinkNode *next;};struct LinkQueue{LinkNode *front;LinkNode *rear;};v

tarjan算法與無向通性

是否 img 搜索 時間 bsp 斷點 技術 代碼 割點 一,無向圖的割點與橋 對於G=(V,E) 1.割點:xξV若刪除x以及與x所連邊後,圖被分裂成為多個聯通圖,則x為圖的割點 2.橋(割邊):eξE若刪除e後圖,圖被分裂成為多個聯通圖,則e為圖的割點

【BZOJ1018】堵塞的交通traffic(線段樹,網格通性

操作 分享圖片 交通 truct ios src ros class main 題意:一個2行C列的矩形網格圖,網格上的每個點代表一個城市,相鄰的城市之間有一條道路 一開始每條道路都是堵塞的,堵塞即為不可經過。經過一些操作後,可能某些道路通暢了,也可能某些道路堵塞了 多次詢

->通性->無向的連通分量和生成樹

文字描述   對無向圖進行遍歷時,對於連通圖,僅需從圖中任一頂點出發,進行深度優先搜尋或廣度優先搜尋,便可訪問到圖中所有頂點。但對非連通圖,則需從多個頂點出發搜尋,每一次從一個新的起始點出發進行搜尋過程得到的頂點訪問序列恰為其各個連通分量中的頂點集。   對於非連通圖,每個連通分量中的頂點集,和遍歷時走過

算法學習——動態通性(線段樹分治+按秩合並並查集)

mes inline ret bsp getc class 離開 。。 node 在考場上遇到了這個的板子題,,,所以來學習了一下線段樹分治 + 帶撤銷的並查集。 題目大意是這樣的:有m個時刻,每個時刻有一個加邊or撤銷一條邊的操作,保證操作合法,沒有重邊自環,每次操作後