真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

c++數(shù)據(jù)結構-圖(詳解附算法代碼,一看就懂)-創(chuàng)新互聯(lián)

圖(Graph)是一種復雜的非線性結構,它可以描述數(shù)據(jù)間的關系,被廣泛使用。

10年積累的成都網站設計、網站制作經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先制作網站后付款的網站建設流程,更有修水免費網站建設讓你可以放心的選擇與我們合作。

圖 G 由兩個集合 V 和 E 組成,記為。V是頂點的有窮非空集合,E是邊的集合。通常,也將 G 的頂點集和邊集表示為 V(G) 和 E(G)。其中,E(G)可以是空集,如果它是空集,那么 G 只有頂點。

圖的定義和概念

有向圖:邊上有箭頭,只能從箭頭的引出的結點到被指向的結點,不能逆著箭頭走。

無向圖:邊上無箭頭,可以隨便走。

結點的度:無向圖中與結點相連的邊的數(shù)量。

結點的入度:有向圖中以結點為終點的邊的數(shù)量。

結點的出度:有向圖中以結點為起點的邊的數(shù)量。

權值:可以理解為邊的長度。

連通:如果結點 U 和 V 之間通過若干個邊和結點能從 U 到達 V,則稱 U 和 V 連通。

回路:起點和終點相同的路徑。

完全圖:一個 n 階的完全無向圖含有 n*(n-1)/2 條邊,一個 n 階的完全有向圖含有 n*(n-1) 條邊。

稠密圖:一個邊數(shù)接近完全圖的圖。

稀疏圖:一個邊數(shù)遠少于完全圖的圖。

強連通分量:有向圖中任意兩點都連通的大子圖。特殊的,一個點也算一個強連通分量。

圖的存儲結構

二維數(shù)組鄰接矩陣存儲

定義 int G[101][101];

G[i][j] 的值,表示點 i 到點 j 的邊的權值,定義如下,

G[i][j]{1或權值,0或無窮

深度優(yōu)先和廣度優(yōu)先遍歷

從圖中某一頂點出發(fā),系統(tǒng)的訪問圖中所有頂點,并且每個頂點只被訪問一次,這種操作叫做圖的遍歷。為了不重復訪問,我們使用一個數(shù)組 visit[] ,被訪問過就變成 true,反之 false。這兩種方法(廣度和深度優(yōu)先遍歷)時間復雜度都是 O(n*n)。

深度優(yōu)先遍歷

深度優(yōu)先遍歷和深度優(yōu)先搜索相似,它是先訪問一個點,再訪問與這個點相連的所有點,當這個點所有相連的點訪問完,再退回下一個點。

廣度優(yōu)先遍歷

它基本不用,和廣度優(yōu)先搜索相似,和深度優(yōu)先遍歷相似,這里不講解。

一筆畫問題

如果一個圖存在一筆畫,則一筆畫的路徑叫做歐拉路,如果起點和終點相同,則這個路徑叫歐拉回路。

奇點是與一個點相連的邊數(shù)是奇數(shù)的點。我們有如下兩個定理:

(1)存在歐拉路的條件:圖是連通的,且有且只有兩個奇點。

(2)存在歐拉回路的條件:圖是聯(lián)通的,且有0個奇點。

#includeusing namespace std;
const int N=1000;
int p[N],q[N];
int n,m;
int sum=0,flag=0;
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) p[i]=i;
    while(m--)
    {
        int a,b;
        cin>>a>>b;
        q[a]++;//由于是無向圖需要把所有邊加上
        q[b]++;
        a=find(a),b=find(b);
        if(a!=b) p[a]=b;
    }
    for(int i=1;i<=n;i++) 
        if(p[i]==i) sum++;
       if(sum==1)
       {
           for(int i=1;i<=n;i++)
           {
               if(q[i]%2!=0)
                   flag++;
           }
       }
     else {cout<<"N"<
例題-圖的遍歷 圖的遍歷 題目描述

給出 N 個點,M條邊的有向圖,對于每個點 v,求 A(v) 表示從點 v 出發(fā),能到達的編號大的點。

輸入格式

第 1 行 2 個整數(shù) N,M,表示點數(shù)和邊數(shù)。

接下來 M 行,每行 2 個整數(shù) Ui,Vi,表示邊 (Ui,Vi)。點用 1,2,.....,N 編號。

輸出格式

一行 N 個整數(shù) A(1),A(2),......,A(N)。

樣例 #1
4 3
1 2
2 4
4 3
樣例輸入 #1 樣例輸出 #1
4 4 3 4

按題目來每次考慮每個點可以到達點編號大的點,不如考慮較大的點可以反向到達哪些點

循環(huán)從N到1,則每個點i能訪問到的結點的A值都是i

每個點訪問一次,這個A值就是最優(yōu)的,因為之后如果再訪問到這個結點那么答案肯定沒當前大了

#include#include#includeusing namespace std;

#define MAXL 100010

int N, M, A[MAXL];
vectorG[MAXL]; //vector存圖 

void dfs(int x, int d) {
    if(A[x]) return; //訪問過 
    A[x] = d;
    for(int i=0; i

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧


分享名稱:c++數(shù)據(jù)結構-圖(詳解附算法代碼,一看就懂)-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/dgccod.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部