2023年陝西省資料總結大綱

2021-11-01 18:19:12 字數 1207 閱讀 8064

1、本題應使用深度優先遍歷,從主調函式進入dfs(v)時 ,開始記數,若退出dfs()前,已訪問完有向圖的全部頂點(設為n個),則有向圖有根,v為根結點。將n個頂點從1到n編號,各呼叫一次dfs()過程,就可以求出全部的根結點。題中有向圖的鄰接表儲存結構、記頂點個數的變數、以及訪問標記陣列等均設計為全域性變數。

建立有向圖g的鄰接表儲存結構參見上面第2題,這裡只給出判斷有向圖是否有根的演算法。

int num=0, visited=0 //num記訪問頂點個數,訪問陣列visited初始化。

const n=使用者定義的頂點數;

adjlist g用鄰接表作儲存結構的有向圖g。

void dfs(v)

//if

p=g[v].firstarc;

while (p)

//while

visited[v]=0; num--; //恢復頂點v

}//dfs

void judgeroot()

//判斷有向圖是否有根,有根則輸出之。

}// judgeroot

演算法中列印根時,輸出頂點在鄰接表中的序號(下標),若要輸出頂點資訊,可使用g[i].vertex。

2、證明由二叉樹的中序序列和後序序列,也可以唯一確定一棵二叉樹。

當n=1時,只有乙個根結點,由中序序列和後序序列可以確定這棵二叉樹。

設當n=m-1時結論成立,現證明當n=m時結論成立。

設中序序列為s1,s2,…,sm,後序序列是p1,p2,…,pm。因後序序列最後乙個元素pm是根,則在中序序列中可找到與pm相等的結點(設二叉樹中各結點互不相同)si(1≤i≤m),因中序序列是由中序遍歷而得,所以si是根結點,s1,s2,…,si-1是左子樹的中序序列,而si+1,si+2,…,sm是右子樹的中序序列。

若i=1,則s1是根,這時二叉樹的左子樹為空,右子樹的結點數是m-1,則和可以唯一確定右子樹,從而也確定了二叉樹。

若i=m,則sm是根,這時二叉樹的右子樹為空,左子樹的結點數是m-1,則和唯一確定左子樹,從而也確定了二叉樹。

最後,當1可唯一確定二叉樹的左子樹,由和

可唯一確定二叉樹的右子樹 。

3、我們可用「破圈法」求解帶權連通無向圖的一棵最小代價生成樹。所謂「破圈法」就是「任取一圈,去掉圈上權最大的邊」,反覆執行這一步驟,直到沒有圈為止。請給出用「破圈法」求解給定的帶權連通無向圖的一棵最小代價生成樹的詳細演算法,並用程式實現你所給出的演算法。

注:圈就是迴路。

2023年陝西省資料要領大綱

1 題目中要求矩陣兩行元素的平均值按遞增順序排序,由於每行元素個數相等,按平均值排列與按每行元素之和排列是乙個意思。所以應先求出各行元素之和,放入一維陣列中,然後選擇一種排序方法,對該陣列進行排序,注意在排序時若有元素移動,則與之相應的行中各元素也必須做相應變動。void translation f...

2023年陝西省資料總結加強

1 設t是一棵滿二叉樹,編寫乙個將t的先序遍歷序列轉換為後序遍歷序列的遞迴演算法。2 兩棵空二叉樹或僅有根結點的二叉樹相似 對非空二叉樹,可判左右子樹是否相似,採用遞迴演算法。int similar bitree p,q 判斷二叉樹p和q是否相似 結束similar 3 因為後序遍歷棧中保留當前結點...

2023年陝西省資料總結要領

1 有乙個帶頭結點的單鏈表,每個結點包括兩個域,乙個是整型域info,另乙個是指向下乙個結點的指標域next。假設單鏈表已建立,設計演算法刪除單鏈表中所有重複出現的結點,使得info域相等的結點只保留乙個。include typedef char datatype typedef struct no...