国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

信息學(xué)奧賽一本通 1341:【例題】一筆畫問題

這篇具有很好參考價值的文章主要介紹了信息學(xué)奧賽一本通 1341:【例題】一筆畫問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【題目鏈接】

ybt 1341:【例題】一筆畫問題

【題目考點】

1. 圖論:歐拉回路

求解歐拉回路使用Hierholzer算法
復(fù)雜度: O ( V + E ) O(V+E) O(V+E)

【解題思路】

  • 無向圖有歐拉回路的條件:所有頂點的度都是偶數(shù)。
  • 無向圖有歐拉路徑的條件:有兩個頂點的度是奇數(shù),其余頂點的度都是偶數(shù)。

該題默認(rèn)一定有歐拉路徑或歐拉回路。
遍歷選擇起始頂點,如果v的度為奇數(shù),那么選擇該頂點為起始頂點。否則起始頂點默認(rèn)為1號頂點。
使用Hierholzer算法可以在 O ( V + E ) O(V+E) O(V+E)的時間復(fù)雜度內(nèi)求出歐拉回路。
頂點數(shù)n最大為100,可以使用鄰接矩陣或鄰接表解決。文章來源地址http://www.zghlxwxcb.cn/news/detail-639804.html

【題解代碼】

解法1:鄰接矩陣
#include<bits/stdc++.h>
using namespace std;
#define N 105
int n, m, edge[N][N], deg[N];//n:頂點數(shù) m:邊數(shù) deg[i]:頂點i的度 
stack<int> stk;
void dfs(int u)//Hierholzer算法 
{
    for(int v = 1; v <= n; ++v)
    {
        if(edge[u][v])
        {
            edge[u][v] = edge[v][u] = 0;
            dfs(v);        
        }
    }
    stk.push(u);
}
int main()
{
    int st = 1, f, t;//st:起點 
    cin >> n >> m;
    for(int i = 1; i <= m; ++i)
    {
        cin >> f >> t;
        edge[f][t] = edge[t][f] = 1;
        deg[f]++, deg[t]++;
    }
    for(int v = 1; v <= n; ++v)//如果找到奇數(shù)度頂點,就從奇數(shù)度頂點出發(fā),否則從1出發(fā) 
    {
        if(deg[v] % 2 == 1)
        {
            st = v;
            break;
        }
    }
    dfs(st);
    while(stk.empty() == false)
    {
        cout << stk.top() << ' ';
        stk.pop();
    }
    return 0;
}
解法2:鄰接表
#include<bits/stdc++.h>
using namespace std;
#define N 105
#define M 2005
struct Node
{
	int v, e;//v:頂點編號 e:邊的編號 
	Node(){}
	Node(int a, int b):v(a), e(b){}
};
int n, m, deg[N], beg[N];//n:頂點數(shù) m:邊數(shù) deg[i]:頂點i的度 beg[i]:頂點i的鄰接點從edge[beg[i]]開始算起,前面的相當(dāng)于刪掉了。 
vector<Node> edge[N];
bool vis[M];
stack<int> stk;
void dfs(int u)//Hierholzer算法 
{
	for(int &i = beg[u]; i < edge[u].size(); ++i)//i是beg[u]的引用,++i相當(dāng)于++beg[u],這樣在下一次訪問頂點u的鄰接點時,只需要從下標(biāo)beg[u]開始看起,前面的當(dāng)做已經(jīng)被刪掉了
	{
		int v = edge[u][i].v, e = edge[u][i].e;
		if(vis[e] == false)
		{
			vis[e] = true;
			dfs(v);
		}
	}
    stk.push(u);
}
int main()
{
    int st = 1, f, t;//st:起點 
    cin >> n >> m;
    for(int i = 1; i <= m; ++i)
    {
        cin >> f >> t;
        edge[f].push_back(Node(t, i));
        edge[t].push_back(Node(f, i));
        deg[f]++, deg[t]++;
    }
    for(int v = 1; v <= n; ++v)//如果找到奇數(shù)度頂點,就從奇數(shù)度頂點出發(fā),否則從1出發(fā) 
    {
        if(deg[v] % 2 == 1)
        {
            st = v;
            break;
        }
    }
    dfs(st);
    while(stk.empty() == false)
    {
        cout << stk.top() << ' ';
        stk.pop();
    }
    return 0;
}

到了這里,關(guān)于信息學(xué)奧賽一本通 1341:【例題】一筆畫問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 信息學(xué)奧賽一本通【1302】股票買賣

    信息學(xué)奧賽一本通1302 1302:股票買賣 時間限制: 1000 ms 內(nèi)存限制: 65536 KB ? 【題目描述】 最近越來越多的人都投身股市,阿福也有點心動了。謹(jǐn)記著“股市有風(fēng)險,入市需謹(jǐn)慎”,阿福決定先來研究一下簡化版的股票買賣問題。 假設(shè)阿福已經(jīng)準(zhǔn)確預(yù)測出了某只股票在未來N天的

    2024年02月05日
    瀏覽(24)
  • 信息學(xué)奧賽一本通(1398:短信計費)

    1398:短信計費 時間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB 提交數(shù): 22811 ??? 通過數(shù): 10561 【題目描述】 用手機(jī)發(fā)短信,一條短信資費為0.1元,但限定一條短信的內(nèi)容在70個字以內(nèi)(包括70個字)。如果你一次所發(fā)送的短信超過了70個字,則會按照每70個字一條短信的限制把它分

    2023年04月08日
    瀏覽(33)
  • 信息學(xué)奧賽一本通 1384:珍珠(bead)

    ybt 1384:珍珠(bead) 1. 圖論:floyd 求傳遞閉包 傳遞閉包:二維數(shù)組e, e[i][j] 表示頂點i到頂點j是否有路徑。 這是個有向圖。每顆珍珠是一個頂點,初始情況下,如果i比j重,那么i到j(luò)有一條弧。 設(shè)布爾類型數(shù)組e,為該圖的傳遞閉包,即 e[i][j] 表示i是否比j重。 先輸入已知的相

    2024年01月24日
    瀏覽(34)
  • 信息學(xué)奧賽一本通 1376:信使(msner)

    ybt 1376:信使(msner) 1. 圖論:最短路徑 每個哨所是一個頂點,哨所與哨所之間的通信線路為邊,兩哨所間通訊花費的時間為邊的權(quán)值。 記第一個哨所為頂點s,信息從第一個哨所傳遞到表示為頂點x的某哨所可能有多條路徑,每條傳送路徑有一個花費的時間,自然要選擇花費時

    2024年02月14日
    瀏覽(31)
  • 信息學(xué)奧賽一本通:1119:矩陣交換行

    【題目描述】 給定一個5×5的矩陣(數(shù)學(xué)上,一個r×c的矩陣是一個由r行c列元素排列成的矩形陣列),將第n行和第m行交換,輸出交換后的結(jié)果。 【輸入】 輸入共6行,前5行為矩陣的每一行元素,元素與元素之間以一個空格分開。 第6行包含兩個整數(shù)m、n,以一個空格分開(1≤m,

    2024年02月22日
    瀏覽(27)
  • 信息學(xué)奧賽一本通 1352 【例4-13】獎金

    ybt 1352 【例4-13】獎金 1. 圖論:拓?fù)渑判?解法1:拓?fù)渑判?每個人是一個頂點。 如果a獎金比b高,應(yīng)該先確定b的獎金數(shù),再確定a的獎金。 因此可以這樣定義邊:如果b的獎金比a高,那么存在有向邊a, b。 設(shè)數(shù)組money,頂點i的獎金為 money[i] 。 圖中入度為0的頂點的獎金為100。

    2024年02月16日
    瀏覽(28)
  • 信息學(xué)奧賽一本通 1380:分糖果(candy)

    ybt 1380:分糖果(candy) 可以認(rèn)為小朋友間關(guān)系的最大數(shù)量為 1 0 5 10^5 1 0 5 1. 圖論:廣搜 2. 圖論:最短路徑 每個小朋友是一個頂點,朋友間的關(guān)系是邊,糖果從每個人傳到另一個人都是1秒鐘的時間,因而該圖是無向無權(quán)圖。 假設(shè)一位小朋友A接收糖果的時刻是t,那么與該小朋友

    2023年04月08日
    瀏覽(57)
  • 信息學(xué)奧賽一本通(1162:字符串逆序)

    1162:字符串逆序 時間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB 提交數(shù): 14027 ??? 通過數(shù): 10525 【題目描述】 輸入一串以‘!’結(jié)束的字符,按逆序輸出。 【輸入】 如題述。 【輸出】 如題述。 【輸入樣例】 【輸出樣例】 【分析】 ? ? ? ? 逆序輸出字符串,本身不難,可以

    2023年04月17日
    瀏覽(33)
  • 信息學(xué)奧賽一本通2041:【例5.9】新矩陣

    【題目描述】 已知一個n×n(2≤n≤20)n×n(2≤n≤20)的矩陣(方陣),把矩陣二條對角線上的元素值加上1010,然后輸出這個新矩陣。 【輸入】 第一行為nn; 下面為一個n×nn×n,矩陣中各正整數(shù)小于100100。 【輸出】 輸出新的矩陣。共nn行,每行nn數(shù),各數(shù)之間用一個空格隔開。 【輸

    2024年02月15日
    瀏覽(31)
  • 信息學(xué)奧賽一本通 1386:打擊犯罪(black)

    ybt 1386:打擊犯罪(black) 1. 并查集 這是個無向圖。每個犯罪團(tuán)伙是一個頂點,犯罪團(tuán)伙之間的聯(lián)系是邊,每個犯罪集團(tuán)是一個連通分量。 以下描述中,連通分量就對應(yīng)了并查集中集合的概念。 “犯罪團(tuán)伙的危險程度”是連通分量中的頂點數(shù)?!白畲蟮姆缸飯F(tuán)伙的危險程度不超

    2024年02月10日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包