第七次作業

2022-07-09 12:12:14 字數 3246 閱讀 9637

這個作業屬於哪個課程

這個作業要求在**

/homework/11472

這個作業的目標

掌握圖的鄰接矩陣和鄰接表表示;掌握圖的深度優先和廣度優先搜尋方法;理解圖的應用方法

學號2018204211

一、實驗目的

1、掌握圖的鄰接矩陣和鄰接表表示

2、掌握圖的深度優先和廣度優先搜尋方法

3、理解圖的應用方法

2、廣度優先搜尋遍歷:寬度優先搜尋演算法(又稱廣度優先搜尋)是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。

4、最小生成樹:乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。 在一給定的無向圖g = (v, e) 中,(u, v) 代表連線頂點 u 與頂點 v 的邊,而 w(u, v) 代表此邊的權重,若存在 t 為 e 的子集且為無迴圈圖,使得w(t) 最小,則此 t 為 g 的最小生成樹。

5、最短路徑:用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。

三、實驗內容和要求

1、閱讀並執行下面程式,根據輸入寫出執行結果。

#define n 20

#define true 1

#define false 0

intvisited[n];

typedef

struct

/*佇列的定義

*/queue;

typedef

struct

/*圖的鄰接矩陣

*/graph;

void creategraph(graph *g); /*

建立乙個無向圖的鄰接矩陣

*/void dfs(int i,graph *g); /*

從第i個頂點出發深度優先搜尋

*/void tdfs(graph *g); /*

深度優先搜尋整個圖

*/void bfs(int k,graph *g); /*

從第k個頂點廣度優先搜尋

*/void tbfs(graph *g); /*

廣度優先搜尋整個圖

*/void init_visit(); /*

初始化訪問標識陣列

*/void creategraph(graph *g) /*

建立乙個無向圖的鄰接矩陣

*/ g->vexnum=i; /*

頂點數目

*/for(i=0;ivexnum;i++) /*

鄰接矩陣初始化

*/for(j=0;jvexnum;j++)

g->arcs[i][j]=0

; printf(

"輸入邊的資訊:\n");

scanf(

"%d,%d

",&i,&j); /*

讀入邊i,j

*/while(i!=-1) /*

讀入i,j為-1時結束*/}

void dfs(int i,graph *g) /*

從第i個頂點出發深度優先搜尋

*/void tdfs(graph *g) /*

深度優先搜尋整個圖

*/void bfs(int k,graph *g) /*

從第k個頂點廣度優先搜尋

*/ }

}void tbfs(graph *g) /*

廣度優先搜尋整個圖

*/void init_visit() /*

初始化訪問標識陣列

*/int

main()

init_visit();

tdfs(&ga);

init_visit();

tbfs(&ga);

return0;

}

輸入:abcdefgh#

0,10,2

0,51,3

1,42,5

2,63,7

4,7-1,-1

執行結果:

2、閱讀並執行下面程式,補充拓撲排序演算法。

#include#include

const

int n=20

;typedef

struct edgenode /*

圖的鄰接表:鄰接鍊錶結點

*/ edgenode;

typedef

struct vnode /*

圖的鄰接表:鄰接表

*/ vnode;

int creategraph_list(vnode adjlist,int *p); /*

建立有向圖的鄰接表

*/void topsort(vnode g,int n); /*

拓撲排序

*/int creategraph_list(vnode adjlist,int *p) /*

建立有向圖的鄰接表

*/ n=i;

*p=n;

/*建立鄰接鍊錶

*/printf(

"\n請輸入弧的資訊(i=-1結束):i,j:\n");

scanf(

"%d,%d

",&i,&j);

while(i!=-1

)

printf(

"鄰接表:");

for(i=0; i/*

輸出鄰接表

*/ }

returnn;}

void topsort(vnode g,int n) /*

拓撲排序

*/

while (top!=-1) //

棧不為空

p=p->next;}}

//if (m//

printf("該圖存在環\n");

}int

main()

第七次作業

磁碟管理和維護 磁碟檔名 dev sd a p 1 128 dev hd a p 1 128 dev vd a p 1 128 heads 磁面 sectors track 扇區 cylinders磁柱 分割槽命令 fdisk dev sd 格式化 mkfs.ext4 dev sda mkfs.xf...

第七次作業

共有一下六步 1.客戶機提出網域名稱解析請求,並將該請求傳送給本地的網域名稱伺服器。2.當本地的網域名稱伺服器收到請求後,就先查詢本地的快取,如果有該紀錄項,則本地的網域名稱伺服器就直接把查詢的結果返回。3.如果本地的快取中沒有該紀錄,則本地網域名稱伺服器就直接把請求發給根網域名稱伺服器,然後根網域...

第七次作業

練習題 1 上面提到了許多魔法方法,如 new init,str,rstr,getitem,setitem 等等,請總結它們各自的使用方法。init 方法,可以理解為初始化方法。new 方法,建立乙個例項物件。只要自己定義了 str self 方法,使用print輸出物件的時候,那麼就會列印從在這個...