2023年江西省資料總結入門

2021-12-22 17:19:42 字數 1664 閱讀 8360

1、給定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演算法構造其最小生成樹(每選取一條邊畫乙個圖)。

2、設t是給定的一棵二叉樹,下面的遞迴程式count(t)用於求得:二叉樹t中具有非空的左,右兩個兒子的結點個數n2;只有非空左兒子的個數nl;只有非空右兒子的結點個數nr和葉子結點個數n0。n2、nl、nr、n0都是全域性量,且在呼叫count(t)之前都置為0.

typedef struct node

node;

int n2,nl,nr,n0;

void count(node *t)

26.樹的先序非遞迴演算法。

void example(b)

btree *b;

if (p->lchild!=null)

(3)___; (4)__;

}}}}

3、設指標變數p指向雙向鍊錶中結點a,指標變數q指向被插入結點b,要求給出在結點a的後面插入結點b的操作序列(設雙向鍊錶中結點的兩個指標域分別為llink和rlink)。

4、由二叉樹的前序遍歷和中序遍歷序列能確定唯一的一棵二叉樹,下面程式的作用是實現由已知某二叉樹的前序遍歷和中序遍歷序列,生成一棵用二叉鍊錶表示的二叉樹並列印出後序遍歷序列,請寫出程式所缺的語句。

#define max 100

typedef struct node

tnode;

char pred[max],inod[max];

main(int argc,int **ar**)

tnode *restore(char *ppos,char *ipos,int n)

postorder(tnode*ptr)

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

#include <>

typedef char datatype;

typedef struct node listnode;

typedef listnode* linklist;

/* 刪除單鏈表中重複的結點 */

linklist deletelist(linklist head)

else

p=p->next;

}return head;

} 6、設有一組初始記錄關鍵字為(45,80,48,40,22,78),要求構造一棵二叉排序樹並給出構造過程。

2023年江西省資料總結入門

1 矩陣中元素按行和按列都已排序,要求查詢時間複雜度為o m n 因此不能採用常規的二層迴圈的查詢。可以先從右上角 i a,j d 元素與x比較,只有三種情況 一是a i,j x,這情況下向j 小的方向繼續查詢 二是a i,j void search datatype a int a,b,c,d,d...

2023年江西省資料總結要領

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

2023年江西省資料總結加強

1 設t是一棵滿二叉樹,編寫乙個將t的先序遍歷序列轉換為後序遍歷序列的遞迴演算法。2 設一棵二叉樹的結點結構為 llink,info,rlink root為指向該二叉樹根結點的指標,p 和q分別為指向該二叉樹中任意兩個結點的指標,試編寫一演算法ancestor root,p,q,r 該演算法找到p和...