徐乙富 張俸川 石少儉
摘 要:在近些年的ACM ICPC競賽中,圖論的題目屢見不鮮。圖論中的圖是由若干給定的點鏈接兩點的線所構(gòu)成的圖形,這種圖形常來用于描述某些事物之間的某種特定關(guān)系,用點代表事物,用連接兩點的線表示相應(yīng)兩個事物間具有的關(guān)系。
關(guān)鍵詞:圖論模型;拓?fù)?;歐拉路徑
DOI:10.16640/j.cnki.37-1222/t.2018.23.090
0 前言
圖論是數(shù)學(xué)的一個分支,它以圖作為研究對象。圖論中的圖是由若干給定的點鏈接兩點的線所構(gòu)成的圖形,這種圖形常來用于描述某些事物之間的某種特定關(guān)系,用點代表事物,用連接兩點的線表示相應(yīng)兩個事物間具有的關(guān)系。利用圖論解題,通常具有高效、簡潔的便利。有了這門工具,并不意味就能很好地解決問題,還在于我們能否熟練地識別與建立一系列的圖論模型。本文通過一些實例,簡單地介紹一下圖論建模的方法與應(yīng)用。并通過建立相關(guān)的模型來解決相對較為復(fù)雜的問題。
1 Cover(HDU)
1.1 題目大意
給一個有n個節(jié)點m條邊的圖,每個節(jié)點從1到n標(biāo)號,題目給出m條邊的連接情況(1<=n,m<=100000),問至少需要幾筆可以走完所有的m條邊,輸出最少的筆畫數(shù)目與每一筆所經(jīng)過的邊的編號。
1.2 分析
容易想到,這個題目需要將最少筆畫數(shù)目轉(zhuǎn)化為無向圖的最小路徑覆蓋問題,然而,不同于常見的有向圖二分圖做法,需要建立一個歐拉路徑或歐拉回路的模型。當(dāng)一個連通塊是歐拉路徑(度數(shù)為奇數(shù)的頂點的數(shù)目為0或者2)時,可以一筆走完所有的邊,所以將每個連通塊轉(zhuǎn)化為歐拉路徑進(jìn)行搜索,轉(zhuǎn)化的方法是通過對度數(shù)為奇數(shù)的兩點之間加邊將連通塊轉(zhuǎn)化為歐拉路徑。
1.3 步驟
(1)首先,我們應(yīng)該根據(jù)題目的輸入將無向圖建立出來,由于頂點個數(shù)比較多,所以無法建立鄰接矩陣,可以建立鄰接表儲存邊的信息。(2)對于每一個連通塊進(jìn)行深度優(yōu)先搜索,對于每一個連通塊內(nèi)度數(shù)為奇數(shù)的點,可以兩兩之間加一條邊,這樣,對于每一個連通塊,最多要加入max(k/2,1)條邊,(k為度數(shù)為奇數(shù)的點的個數(shù))。(3)再次進(jìn)行深度優(yōu)先搜索,每次搜索到加入的邊時,說明搜到一條路徑,進(jìn)行輸出路徑(可以用一個以為數(shù)組暫時保存路徑并進(jìn)行輸出),這樣,就正好輸出了max(k/2,1)條的路徑。
1.4 小結(jié)
通過分析相關(guān)的問題,將一個復(fù)雜的問題轉(zhuǎn)化為構(gòu)造歐拉路徑的簡單問題,建立了正確的模型。由此可見,對于問題正確的分析與認(rèn)識,是建立模型,解決問題中至關(guān)重要的一步。本題所用到的歐拉路徑模型,在競賽中比較常見,是一個重要的解決問題的模型與方法。
2 Guess(UVA1423)
2.1 題目大意
給出一個n*n(N>1&&N;<=10)的上三角矩陣S,S[i][j]表示數(shù)列a從a[i]+...a[j]和的大小,要求我們求出a[1]到a[n]的所有值,即通過和的值求元素的值。
2.2 分析
首先想到應(yīng)該求出sum[0]到sum[n]的值,輸出即可,而sum[i]的值可以設(shè)置在0到10之間,這樣的話,任意的sum[i]與sum[i-1]只差的絕對值不會超過10,滿足了題目要求的任意a[i]的絕對值小于等于10。 重點在于,這樣的前綴和可以轉(zhuǎn)化為拓?fù)渑判颍裪看做節(jié)點,當(dāng)a[i]加到a[j]的值大于0時,即sum[j]-sum[i-1]大于0,這樣連一條從j到i-1的邊,反之,連一條,從i-1到j(luò)的邊,這樣,最大的邊入度為0,進(jìn)行拓?fù)渑判蚣纯伞?/p>
2.3 步驟
(1)首先,對于輸入進(jìn)行建圖,當(dāng)輸入字符為‘+時,在j與i-1間加一條邊,當(dāng)輸入字符為‘-時,在i-1到j(luò)間建一條邊。(2)進(jìn)行拓?fù)渑判?,對于n個點,每次找到入度為0的點 t ,將它的度數(shù)變?yōu)?1,并標(biāo)記已經(jīng)訪問過這個點,將所有t指向的點的度數(shù)減一,每次記錄sum[t]=now--,初始now為10。(3)根據(jù)拓?fù)渑判蚯蟪龅膕um數(shù)組,求出最終的答案,即ans[i]=sum[i]-sum[i-1]。
2.4 小結(jié)
本道題目是一個比較抽象的題目,但是經(jīng)過對于前綴和性質(zhì)的認(rèn)真分析,可以建立了拓?fù)渑判蜻@一模型,將一個復(fù)雜的問題轉(zhuǎn)化為一個簡單的拓?fù)溥^程,在ACM ICPC中,拓?fù)渑判蜃鳛橐粋€常見的模型,經(jīng)常用于簡化與解決復(fù)雜的問題。
3 結(jié)論
問題是千變?nèi)f化的,如何建立問題的圖論模型并沒有通用的準(zhǔn)則。前面的兩個例子都比較簡單,在更復(fù)雜的問題中,有時會感到難以建立適當(dāng)?shù)哪P?,這時,需要在不改變問題原型本身的性質(zhì)的前提下,對原型進(jìn)行抽象,簡化,在此基礎(chǔ)上建立合適,有效的模型。有時,建立了問題的一個模型之后,可能會感到難以求解,這時,可能需要對模型進(jìn)行修改,轉(zhuǎn)化,或者對原型進(jìn)行更深入的分析,抽取其中較關(guān)鍵的要素,建立一個易于求解的模型。這些都需要有豐富的經(jīng)驗,靈活的思維以及良好的創(chuàng)造力。在ICPC比賽中,更是要求在規(guī)定的時間內(nèi)可以正確的分析問題,建立相應(yīng)的模型,并解決問題的能力。
參考文獻(xiàn):
[1]劉汝佳.算法競賽入門經(jīng)典.第2版[M].清華大學(xué)出版社,2014.
[2]巫澤俊.挑戰(zhàn)程序設(shè)計競賽[M].人民郵電出版社,2013.
[3]黃蘭,魯珍珍,尹倩華等.圖論及其算法在數(shù)學(xué)建模中的應(yīng)用[J].數(shù)學(xué)學(xué)習(xí)與研究,2016(05):106-107.
[4]楊玉軍,王大勇.圖論在數(shù)學(xué)建模中的應(yīng)用[J].教育現(xiàn)代化,2018
(04).
作者簡介:徐乙富(1997-),男,山東臨沂人,本科,研究方向:ACM圖論建模與應(yīng)用。