第七次作業

2022-07-11 22:45:19 字數 4102 閱讀 4784

這個作業屬於哪個課程

資料結這個作業要求在**

第七次作業:圖的表示與遍

這個作業的目標

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

學號2018204113

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

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

3、理解圖的應用方法

2、廣度優先搜尋遍歷:廣度優先搜尋(也稱寬度優先搜尋,縮寫bfs,以下採用廣度來描述)是連通圖的一種遍歷演算法這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜尋整張圖,直到找到結果為止。基本過程,bfs是從根節點開始,沿著樹(圖)的寬度遍歷樹(圖)的節點。如果所有節點均被訪問,則演算法中止。一般用佇列資料結構來輔助實現bfs演算法。

4、最小生成樹:在連通網的所有生成樹中,所有邊的代價和最小的生成樹,稱為最小生成樹。

5、最短路徑:從某頂點出發,沿圖的邊到達另一頂點所經過的路徑中,各邊上權值之和最小的一條路徑叫做最短路徑。

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

#define n 20

#define true 1

#define false 0

int visited[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() /*初始化訪問標識陣列*/

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%d",s->adjvex);

s=s->next;}}

return n;

}void topsort(vnode g,int n) /*拓撲排序*/

while (top!=-1)

p=p->next;}}

}int main()

根據輸入,輸出有向圖的拓撲排序序列。並畫出有向圖。輸入:

abcdef#

0,11,2

2,34,1

4,5-1,-1

執行結果:

3、閱讀並執行下面程式。

#define n 20

#define true 1

#define inf 32766 /*鄰接矩陣中的無窮大元素*/

#define infin 32767 /*比無窮大元素大的數*/

typedef struct

graph;

void creategraph_w(graph *g,int flag);

void prim(graph *g,int u);

void dijkstra(graph g,int v);

void showprim();

void showdij();

/*建帶權圖的鄰接矩陣,若flag為1則為無向圖,flag為0為有向圖*/

void creategraph_w(graph *g,int flag)

g->vexnum=i;

for(i=0;i<6;i++) /*鄰接矩陣初始化*/

for(j=0;j<6;j++)

g->arcs[i][j]=inf;

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

scanf("%d,%d,%d",&i,&j,&w); /*讀入邊(i,j,w)*/

while(i!=-1) /*讀入i為-1時結束*/

}void prim(graph *g,int u)/*出發頂點u*/

lowcost[u]=0;

for(i=1;ivexnum;i++) /*迴圈求最小生成樹中的各條邊*/

}}void printpath(graph g,int startvex,int endvex)

else}}

}void dijkstra(graph g,int v)

}}void showprim()/*最小生成樹prim演算法演示*/

void showdij()

int main()

下面的輸入分別驗證prim演算法和dijstra演算法。輸入例項的第一部分為無向圖,求其最小生成樹;輸入的第二部分為有向圖,求其最短路徑。

最小生成樹 最短路徑

abcdef#

0,1,6

0,2,1

0,3,5

1,2,5

1,4,3

2,3,5

2,4,6

2,5,4

3,5,2

4,5,6

-1,-1,-1

abcdef#

0,2,10

0,5,100

0,4,30

1,2,5

2,3,50

3,4,20

3,5,10

4,3,20

4,5,60

-1,-1,-1

執行結果:

了解了圖的鄰接矩陣和鄰接表表示,深度優先和廣度優先搜尋方法,學會利用其求解最小生成樹和最短路徑。

第七次作業

磁碟管理和維護 磁碟檔名 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輸出物件的時候,那麼就會列印從在這個...