2019黑龍江省資料結構分析基礎

2022-10-01 14:36:07 字數 2476 閱讀 7702

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

void translation(float *matrix,int n)

//本演算法對n×n的矩陣matrix,通過行變換,使其各行元素的平均值按遞增排列。

//for i

for(i=0; i

sum=p[i]; p[i]=p[k]; p[k]=sum; //交換一維陣列中元素之和.

}//if

}//for i

free(p); //釋放p陣列.

}// translation

[演算法分析] 演算法中使用選擇法排序,比較次數較多,但資料交換(移動)較少.若用其它排序方法,雖可減少比較次數,但資料移動會增多.演算法時間複雜度為o(n2).

2、請編寫乙個判別給定二叉樹是否為二叉排序樹的演算法,設二叉樹用llink-rlink法儲存。

3、給定n個村莊之間的交通圖,若村莊i和j之間有道路,則將頂點i和j用邊連線,邊上的wij表示這條道路的長度,現在要從這n個村莊中選擇乙個村莊建一所醫院,問這所醫院應建在哪個村莊,才能使離醫院最遠的村莊到醫院的路程最短?試設計乙個解答上述問題的演算法,並應用該演算法解答如圖所示的例項。20分

void hospital(adjmatrix w,int n)

//在以鄰接帶權矩陣表示的n個村莊中,求醫院建在何處,使離醫院最遠的村莊到醫院的路徑最短。

//在最長路徑中,取最短的一條。m記最長路徑,k記出發頂點的下標。

printf(「醫院應建在%d村莊,到醫院距離為%d\n」,i,m);

for}//演算法結束

對以上例項模擬的過程略。各行中最大數依次是9,9,6,7,9,9。這幾個最大數中最小者為6,故醫院應建在第三個村莊中,離醫院最遠的村莊到醫院的距離是6。

1、對圖1所示的連通網g,請用prim演算法構造其最小生成樹(每選取一條邊畫乙個圖)。

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

注:圈就是迴路。

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

void translation(float *matrix,int n)

//本演算法對n×n的矩陣matrix,通過行變換,使其各行元素的平均值按遞增排列。

//for i

for(i=0; i

sum=p[i]; p[i]=p[k]; p[k]=sum; //交換一維陣列中元素之和.

}//if

}//for i

free(p); //釋放p陣列.

}// translation

[演算法分析] 演算法中使用選擇法排序,比較次數較多,但資料交換(移動)較少.若用其它排序方法,雖可減少比較次數,但資料移動會增多.演算法時間複雜度為o(n2).

6、 將頂點放在兩個集合v1和v2。對每個頂點,檢查其和鄰接點是否在同乙個集合中,如是,則為非二部圖。為此,用整數1和2表示兩個集合。再用一佇列結構存放圖中訪問的頂點。

int bpgraph (adjmatrix g)

判斷以鄰接矩陣表示的圖g是否是二部圖。

//初始化,各頂點未確定屬於那個集合

q[1]=1; r=1; s[1]=1;//頂點1放入集合s1

while(f //鄰接點入佇列

else if (s[j]==s[v]) return(0);} //非二部圖

}//if (!visited[v])

}//while

return(1); }//是二部圖

[演算法討論] 題目給的是連通無向圖,若非連通,則演算法要修改。

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

void translation(float *matrix,int n)

//本演算法對n×n的矩陣matrix,通過行變換,使其各行元素的平均值按遞增排列。

{int i,j,k,l;

float sum,min; //sum暫存各行元素之和

float *p, *pi, *pk;

for(i=0; i {sum=0.0; pk=matrix+i*n; //pk指向矩陣各行第1個元素.

for (j=0; j*(p+i)=sum將一行元素之和存入一維陣列.

2019黑龍江省資料結構與演算法理論考試試題及答案

1 在乙個具有n個單元的順序棧中,假定以位址低端 即0單元 作為棧底,以top作為棧頂指標,當做出棧處理時,top變化為 c a top不變 b top 0 c top d top 2 廣義表a a,b,c,d e,f,g 則head tail head tail tail a d a gb dc ...

2023年黑龍江省

2010年黑龍江省公務員錄用考試行政職業能力測驗答案解析 1 20 bdcba ddbbb ddddb dacab 21 35 bdcab addcc dbada 36 a 基數項 1 0 1是遞減的數列偶數項是2 3 4的遞增數列下乙個數是基數所以為 2 37 a 183 168 15,也就是16...

2023年黑龍江省資料總結大綱

1 給出折半查詢的遞迴演算法,並給出演算法時間複雜度性分析。2 將頂點放在兩個集合v1和v2。對每個頂點,檢查其和鄰接點是否在同乙個集合中,如是,則為非二部圖。為此,用整數1和2表示兩個集合。再用一佇列結構存放圖中訪問的頂點。int bpgraph adjmatrix g 判斷以鄰接矩陣表示的圖g是...