廣度優先搜尋

2021-07-14 16:49:34 字數 1941 閱讀 4011

在本**實現使用廣度優先搜尋演算法實現遍歷無向圖。本**中不建立廣度搜尋樹。

儲存無向圖的檔名是mapinfo.txt,裡面儲存著無向圖的鄰接矩陣,內容如下:

0 1 0 0 1 0 0 0

1 0 0 0 0 1 0 0

0 0 0 1 0 1 1 0

0 0 1 0 0 0 1 1

1 0 0 0 0 0 0 0

0 1 1 0 0 0 1 0

0 0 1 1 0 1 0 1

0 0 0 1 0 0 1 0

在本**中使用佇列來給每個節點設定「優先順序」,即遍歷的先後次序。**如下:

#include 

#include

#include

#define max 10000

enum ;

typedef

struct mapnode

mapnode;

typedef

struct queue

thisqueue;

mapnode *head[8];

thisqueue *queuehead = (thisqueue *)malloc(sizeof(thisqueue));

static

int enqueue(thisqueue *);

static thisqueue* dequeue(void);

static

bool queueisempty(void);

static

void getmapinfo(void);

static

void inithead(void);

static

void inserttoneibortable(mapnode *, mapnode *);

static

void breadth_first_search(mapnode*);

void colorall(int nodename, int color)

p = p->next;}}

}void breadth_first_search(mapnode *root)

}//newque->node = p;

newque->next = null;

enqueue(newque);

}p = p->next;

}p1->color = black;

colorall(p1->nodename,black);

}}thisqueue *dequeue(void)

bool queueisempty(void)

int enqueue(thisqueue *node)

thisqueue *p = queuehead;

while(p->next != null)

p->next = node;

count++;

return count;

}void inithead(void)

queuehead = null;

}void inserttoneibortable(mapnode *head,mapnode *node)

void initmapinfo(void)

int relation[8] = ;

int index = 0;

int i = 0;

int n = 0;

while(1)

}index++;

}fclose(fp);

fp = null;

}int main()

當然,本**的方法肯定比不上建立廣度搜尋樹,僅從記憶體使用上來看,本程式會占用更大的記憶體。但對學習廣度優先搜尋也能提供參考價值

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...

廣度優先搜尋

include include include include using namespace std struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int visited 9 遍歷標...

廣度優先搜尋

廣度優先搜尋詳解 1.也稱寬度優先搜尋,顧名思義,就是將一棵樹一層一層往下搜。演算法首先搜尋和s距離為k的所有頂點,然後再去搜尋和s距離為k l的其他頂點。bfs是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...