在本**實現使用廣度優先搜尋演算法實現遍歷無向圖。本**中不建立廣度搜尋樹。
儲存無向圖的檔名是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是一種完備策略,即只要問題有解,它就一定可以找到解。並且,廣度優先搜尋找到的解,還一定是路徑最短的解。但是它盲目性較大,尤其是當目標節點距...