2023河南省數(shù)據(jù)分析深入_第1頁(yè)
2023河南省數(shù)據(jù)分析深入_第2頁(yè)
2023河南省數(shù)據(jù)分析深入_第3頁(yè)
2023河南省數(shù)據(jù)分析深入_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1、在有向圖G中,如果r到G中的每個(gè)結(jié)點(diǎn)都有路徑可達(dá),那么稱(chēng)結(jié)點(diǎn)r為G的根結(jié)點(diǎn)。編寫(xiě)一個(gè)算法完成以下功能:1建立有向圖G的鄰接表存儲(chǔ)結(jié)構(gòu);2判斷有向圖G是否有根,假設(shè)有,那么打印出所有根結(jié)點(diǎn)的值。2、對(duì)二叉樹(shù)的某層上的結(jié)點(diǎn)進(jìn)行運(yùn)算,采用隊(duì)列結(jié)構(gòu)按層次遍歷最適宜。int LeafKlevel(BiTree bt, int k) /求二叉樹(shù)bt 的第k(k1) 層上葉子結(jié)點(diǎn)個(gè)數(shù)if(bt=null | k1) return(0); BiTree p=bt,Q; /Q是隊(duì)列,元素是二叉樹(shù)結(jié)點(diǎn)指針,容量足夠大int front=0,rear=1,leaf=0; /front 和rear是隊(duì)頭和隊(duì)尾指針

2、, leaf是葉子結(jié)點(diǎn)數(shù)int last=1,level=1; Q1=p; /last是二叉樹(shù)同層最右結(jié)點(diǎn)的指針,level 是二叉樹(shù)的層數(shù)while(frontlchild & !p-rchild) leaf+; /葉子結(jié)點(diǎn) if(p-lchild) Q+rear=p-lchild; /左子女入隊(duì) if(p-rchild) Q+rear=p-rchild; /右子女入隊(duì) if(front=last) level+; /二叉樹(shù)同層最右結(jié)點(diǎn)已處理,層數(shù)增1 last=rear; /last移到指向下層最右一元素if(levelk) return (leaf); /層數(shù)大于k 后退出運(yùn)行 /whi

3、le /結(jié)束LeafKLevel3、(1)p-rchild (2)p-lchild (3)p-lchild (4)ADDQ(Q,p-lchild) (5)ADDQ(Q,p-rchild)25. (1)t-rchild!=null (2)t-rchild!=null (3)N0+ (4)count(t-lchild) (5)count(t-rchild)26. .(1)top+ (2) stacktop=p-rchild (3)top+ (4)stacktop=p-lchild27. (1)*ppos / 根結(jié)點(diǎn)2rpos=ipos (3)rposipos (4)ipos (5)ppos+14、

4、編寫(xiě)一個(gè)過(guò)程,對(duì)一個(gè)nn矩陣,通過(guò)行變換,使其每行元素的平均值按遞增順序排列。5、給定n個(gè)村莊之間的交通圖,假設(shè)村莊i和j之間有道路,那么將頂點(diǎn)i和j用邊連接,邊上的Wij表示這條道路的長(zhǎng)度,現(xiàn)在要從這n個(gè)村莊中選擇一個(gè)村莊建一所醫(yī)院,問(wèn)這所醫(yī)院應(yīng)建在哪個(gè)村莊,才能使離醫(yī)院最遠(yuǎn)的村莊到醫(yī)院的路程最短?試設(shè)計(jì)一個(gè)解答上述問(wèn)題的算法,并應(yīng)用該算法解答如下列圖的實(shí)例。20分void Hospital(AdjMatrix w,int n) /在以鄰接帶權(quán)矩陣表示的n個(gè)村莊中,求醫(yī)院建在何處,使離醫(yī)院最遠(yuǎn)的村莊到醫(yī)院的路徑最短。 for (k=1;k=n;k+) /求任意兩頂點(diǎn)間的最短路徑 for (i

5、=1;i=n;i+) for (j=1;j=n;j+) if (wik+wkjwij) wij=wik+wkj; m=MAXINT; /設(shè)定m為機(jī)器內(nèi)最大整數(shù)。 for (i=1;i=n;i+) /求最長(zhǎng)路徑中最短的一條。 s=0; for (j=1;j=n;j+) /求從某村莊i1=is) s=wij; if (s=m) m=s; k=i;/在最長(zhǎng)路徑中,取最短的一條。m記最長(zhǎng)路徑,k記出發(fā)頂點(diǎn)的下標(biāo)。 Printf(“醫(yī)院應(yīng)建在%d村莊,到醫(yī)院距離為%dn,i,m); /for/算法結(jié)束對(duì)以上實(shí)例模擬的過(guò)程略。各行中最大數(shù)依次是9,9,6,7,9,9。這幾個(gè)最大數(shù)中最小者為6,故醫(yī)院應(yīng)建在

6、第三個(gè)村莊中,離醫(yī)院最遠(yuǎn)的村莊到醫(yī)院的距離是6。1、對(duì)圖1所示的連通網(wǎng)G,請(qǐng)用Prim算法構(gòu)造其最小生成樹(shù)每選取一條邊畫(huà)一個(gè)圖。6、二部圖bipartite graph G=V,E是一個(gè)能將其結(jié)點(diǎn)集V分為兩不相交子集V 1和V2=V-V1的無(wú)向圖,使得:V1中的任何兩個(gè)結(jié)點(diǎn)在圖G中均不相鄰,V2中的任何結(jié)點(diǎn)在圖G中也均不相鄰。1請(qǐng)各舉一個(gè)結(jié)點(diǎn)個(gè)數(shù)為5的二部圖和非二部圖的例子。2請(qǐng)用C或PASCAL編寫(xiě)一個(gè)函數(shù)BIPARTITE判斷一個(gè)連通無(wú)向圖G是否是二部圖,并分析程序的時(shí)間復(fù)雜度。設(shè)G用二維數(shù)組A來(lái)表示,大小為n*nn為結(jié)點(diǎn)個(gè)數(shù)。請(qǐng)?jiān)诔绦蛑屑颖匾淖⑨?。假設(shè)有必要可直接利用堆?;蜿?duì)列操作?!?/p>

7、7、有向圖G=(V,E),其中V=V1,V2,V3,V4,V5,V6,V7,E=,寫(xiě)出G的拓?fù)渑判虻慕Y(jié)果。G拓?fù)渑判虻慕Y(jié)果是:V1、V2、V4、V3、V5、V6、V7 8、設(shè)有一個(gè)數(shù)組中存放了一個(gè)無(wú)序的關(guān)鍵序列K1、K2、Kn?,F(xiàn)要求將Kn放在將元素排序后的正確位置上,試編寫(xiě)實(shí)現(xiàn)該功能的算法,要求比較關(guān)鍵字的次數(shù)不超過(guò)n。51. 借助于快速排序的算法思想,在一組無(wú)序的記錄中查找給定關(guān)鍵字值等于key的記錄。設(shè)此組記錄存放于數(shù)組rl.h中。假設(shè)查找成功,那么輸出該記錄在r數(shù)組中的位置及其值,否那么顯示“not find信息。請(qǐng)編寫(xiě)出算法并簡(jiǎn)要說(shuō)明算法思想。9、將頂點(diǎn)放在兩個(gè)集合V1和V2。對(duì)每個(gè)

8、頂點(diǎn),檢查其和鄰接點(diǎn)是否在同一個(gè)集合中,如是,那么為非二部圖。為此,用整數(shù)1和2表示兩個(gè)集合。再用一隊(duì)列結(jié)構(gòu)存放圖中訪問(wèn)的頂點(diǎn)。 int BPGraph (AdjMatrix g) /判斷以鄰接矩陣表示的圖g是否是二部圖。 int s; /頂點(diǎn)向量,元素值表示其屬于那個(gè)集合值1和2表示兩個(gè)集合 int Q;/Q為隊(duì)列,元素為圖的頂點(diǎn),這里設(shè)頂點(diǎn)信息就是頂點(diǎn)編號(hào)。 int f=0,r,visited; /f和r分別是隊(duì)列的頭尾指針,visited是訪問(wèn)數(shù)組 for (i=1;i=n;i+) visitedi=0;si=0; /初始化,各頂點(diǎn)未確定屬于那個(gè)集合 Q1=1; r=1; s1=1;/頂

9、點(diǎn)1放入集合S1while(fr) v=Q+f; if (sv=1) jh=2; else jh=1;/準(zhǔn)備v的鄰接點(diǎn)的集合號(hào) if (!visitedv) visitedv=1; /確保對(duì)每一個(gè)頂點(diǎn),都要檢查與其鄰接點(diǎn)不應(yīng)在一個(gè)集合中for (j=1,j=n;j+) if (gvj=1)if (!sj) sj=jh; Q+r=j; /鄰接點(diǎn)入隊(duì)列 else if (sj=sv) return(0); /非二部圖 /if (!visitedv)/while return(1); /是二部圖算法討論 題目給的是連通無(wú)向圖,假設(shè)非連通,那么算法要修改。10、連通圖的生成樹(shù)包括圖中的全部n個(gè)頂點(diǎn)和足

10、以使圖連通的n-1條邊,最小生成樹(shù)是邊上權(quán)值之和最小的生成樹(shù)。故可按權(quán)值從大到小對(duì)邊進(jìn)行排序,然后從大到小將邊刪除。每刪除一條當(dāng)前權(quán)值最大的邊后,就去測(cè)試圖是否仍連通,假設(shè)不再連通,那么將該邊恢復(fù)。假設(shè)仍連通,繼續(xù)向下刪;直到剩n-1條邊為止。 void SpnTree (AdjList g) /用“破圈法求解帶權(quán)連通無(wú)向圖的一棵最小代價(jià)生成樹(shù)。typedef struct int i,j,wnode; /設(shè)頂點(diǎn)信息就是頂點(diǎn)編號(hào),權(quán)是整型數(shù) node edge; scanf( %d%d,&e,&n) ; /輸入邊數(shù)和頂點(diǎn)數(shù)。 for (i=1;i=e;i+) /輸入e條邊:頂點(diǎn),權(quán)值。 sca

11、nf(%d%d%d ,&edgei.i ,&edgei.j ,&edgei.w); for (i=2;i=e;i+) /按邊上的權(quán)值大小,對(duì)邊進(jìn)行逆序排序。 edge0=edgei; j=i-1;while (edgej.w=n) /破圈,直到邊數(shù)e=n-1. if (connect(k) /刪除第k條邊假設(shè)仍連通。 edgek.w=0; eg-; /測(cè)試下一條邊edgek,權(quán)值置0表示該邊被刪除k+; /下條邊 /while /算法結(jié)束。 connect()是測(cè)試圖是否連通的函數(shù),可用圖的遍歷實(shí)現(xiàn),11、設(shè)一棵二叉樹(shù)的結(jié)點(diǎn)結(jié)構(gòu)為 (LLINK,INFO,RLINK),ROOT為指向該二叉樹(shù)根

12、結(jié)點(diǎn)的指針,p和q分別為指向該二叉樹(shù)中任意兩個(gè)結(jié)點(diǎn)的指針,試編寫(xiě)一算法ANCESTORROOT,p,q,r,該算法找到p和q的最近共同祖先結(jié)點(diǎn)r。12、#define maxsize 棧空間容量 void InOutS(int smaxsize) /s是元素為整數(shù)的棧,本算法進(jìn)行入棧和退棧操作。 int top=0; /top為棧頂指針,定義top=0時(shí)為???。 for(i=1; i=n; i+) /n個(gè)整數(shù)序列作處理。 scanf(“%d,&x); /從鍵盤(pán)讀入整數(shù)序列。 if(x!=-1) / 讀入的整數(shù)不等于-1時(shí)入棧。 if(top=maxsize-1)printf(“棧滿n);exi

13、t(0);else s+top=x; /x入棧。 else /讀入的整數(shù)等于-1時(shí)退棧。 if(top=0)printf(“??課);exit(0); else printf(“出棧元素是%dn,stop-); /算法結(jié)13、給定n個(gè)村莊之間的交通圖,假設(shè)村莊i和j之間有道路,那么將頂點(diǎn)i和j用邊連接,邊上的Wij表示這條道路的長(zhǎng)度,現(xiàn)在要從這n個(gè)村莊中選擇一個(gè)村莊建一所醫(yī)院,問(wèn)這所醫(yī)院應(yīng)建在哪個(gè)村莊,才能使離醫(yī)院最遠(yuǎn)的村莊到醫(yī)院的路程最短?試設(shè)計(jì)一個(gè)解答上述問(wèn)題的算法,并應(yīng)用該算法解答如下列圖的實(shí)例。20分void Hospital(AdjMatrix w,int n) /在以鄰接帶權(quán)矩陣表

14、示的n個(gè)村莊中,求醫(yī)院建在何處,使離醫(yī)院最遠(yuǎn)的村莊到醫(yī)院的路徑最短。 for (k=1;k=n;k+) /求任意兩頂點(diǎn)間的最短路徑 for (i=1;i=n;i+) for (j=1;j=n;j+) if (wik+wkjwij) wij=wik+wkj; m=MAXINT; /設(shè)定m為機(jī)器內(nèi)最大整數(shù)。 for (i=1;i=n;i+) /求最長(zhǎng)路徑中最短的一條。 s=0; for (j=1;j=n;j+) /求從某村莊i1=is) s=wij; if (s=m) m=s; k=i;/在最長(zhǎng)路徑中,取最短的一條。m記最長(zhǎng)路徑,k記出發(fā)頂點(diǎn)的下標(biāo)。 Printf(“醫(yī)院應(yīng)建在%d村莊,到醫(yī)院距離

15、為%dn,i,m); /for/算法結(jié)束對(duì)以上實(shí)例模擬的過(guò)程略。各行中最大數(shù)依次是9,9,6,7,9,9。這幾個(gè)最大數(shù)中最小者為6,故醫(yī)院應(yīng)建在第三個(gè)村莊中,離醫(yī)院最遠(yuǎn)的村莊到醫(yī)院的距離是6。1、對(duì)圖1所示的連通網(wǎng)G,請(qǐng)用Prim算法構(gòu)造其最小生成樹(shù)每選取一條邊畫(huà)一個(gè)圖。14、#define maxsize ??臻g容量 void InOutS(int smaxsize) /s是元素為整數(shù)的棧,本算法進(jìn)行入棧和退棧操作。 int top=0; /top為棧頂指針,定義top=0時(shí)為???。 for(i=1; i=n; i+) /n個(gè)整數(shù)序列作處理。 scanf(“%d,&x); /從鍵盤(pán)讀入整數(shù)序列。 if(x!=-1) / 讀入的整數(shù)不等于-1時(shí)入棧。 if(top=maxs

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論