鄰接表 深度優先遍歷和廣度優先遍歷

2021-08-19 13:43:51 字數 1235 閱讀 3207

9天沒有摸c語言,手很生啊!

唉,考試終於結束了,就剩三門了。

演算法、資料結構太重要了,不要忽視啊!

#include using namespace std;

#define maxsize 100

int v[maxsize];//標誌位,判斷該結點有沒有被訪問

typedef struct arcnode //定義表節點

arcnode;

typedef struct vnode //定義頭結點

vnode,adjlist[maxsize];

typedef struct //定義圖的整體資料結構

algraph;

void init(algraph &g)//初始化無向圖

for(i=0;i>a>>b;

/*a指向b*/

s=new arcnode[sizeof(arcnode)];

s->adjvex=b;

s->next=g.vertices[a].firstarc;

g.vertices[a].firstarc=s;

/*b指向a*/

s=new arcnode[sizeof(arcnode)];

s->adjvex=a;

s->next=g.vertices[b].firstarc;

g.vertices[b].firstarc=s;

}}int firstadjvex(algraph g,int k)//返回圖g中與k相鄰且未被訪問過的點的編號,如果不存在這樣的點返回-1

int nextadjvex(algraph g,int k,int w)//返回圖g中與k相鄰、除了編號是w之外的未被訪問過的點的編號,如果不存在這樣的點返回-1

void dfs(algraph g,int k)//對節點k進行深度優先遍歷

{ int w;

v[k]=1;//進來就置1

cout

memset(v,0,sizeof(v));//因為之前深搜過,這裡重新置0一下

for(i=1;i<=g.vexnum;i++)//依次對每個頂點進行考察

if(!v[i])//只要不空

{v[i]=1;//只要不空,進來第一件事就是置1

深度優先遍歷 和 廣度優先遍歷

圖的廣度優先搜尋是樹的按層次遍歷的推廣,它的基本思想是 首先訪問初始點vi,並將其標記為已訪問過,接著訪問vi的所有未被訪問過的鄰接點 vi1,vi2,vi t,並均標記已訪問過,然後再按照vi1,vi2,vi t的次序,訪問每乙個頂點的所有未被訪問過的鄰接點,並均標記為已訪問過,依次類推,直到圖中...

廣度優先遍歷和深度優先遍歷

深度優先遍歷 廣度優先遍歷是圖的一種遍歷方式,它的思想就是遍歷這個點相鄰的所有的點,再對這些點進行廣度優先遍歷.如下圖所示 首先我們從a點開始遍歷,然後遍歷所有和a相鄰的點f和點g 然後對f和點g進行遍歷進行遍歷,得到點e,h,k和b 然後再繼續,知道所有的點都遍歷完成 首先,我們先定義圖graph...

廣度優先遍歷和深度優先遍歷

1.1 概念 以初始節點v0作為第一層節點,接著訪問它。然後迭代第一層節點即v0,訪問它相鄰接的沒有訪問過的節點比如v1,v2,v1,v2加入到第二層節點 迭代第二層節點v1,v2,v1,v2依次訪問相鄰接的沒有訪問過的節點,重複上述步驟直至所有節點都被訪問過為止。如圖所示首先訪問根節點v0,並將v...