acm基礎1 深搜與寬搜

2021-08-25 19:51:56 字數 1070 閱讀 6398

//deep first search

void dfs(adjlist adj,int v,int visited)

//adj is a adjlist, v is the no. of first point,visited is a assistant array

int i;

struct edgenode *p;

visited[v]=1;

printf("[%d,%c]",v,adj[v].data);

p=adj[v].link;

while(p!=null)

if(visited[p->from]==0) dfs(adj,p->from,visited);

p=p->next;

//broad first search

void bfs(adjlist adj,int v,int visited)

struct edgenode *p;

visited[v]=1;

int front=-1,rear=-1;

int i;

rear++;

printf("[%d,%c]",v,adj[v].data);

queue[rear]=v;

while(front!=rear)

front=(front+1)%maxvex;

i=queue[front];

p=adj[i].link;

while(p!=null)

if(visited[p->from]==0)

printf("..%d,%d:/n",p->from,visited[p->from]);

visited[p->from]=1;

printf("[%d,%c]",p->from,adj[p->from].data);

rear=(rear+1)%maxvex;

queue[rear]=p->from;

p=p->next;

深搜和寬搜很重要。

深蒐用遞迴實現,第一部分為處理節點,第二部分若不滿足條件則擴充套件。

寬搜利用擴充套件的概念,對當前點擴充套件所有狀態。

深搜與廣搜

深搜是一種一條路走到黑,碰壁就倒退的演算法。運用遞迴思想,如果到了不符合條件的節點就撤回一步,然後再選擇另一條路走下去。如果這個節點的所有路徑都走完了,再撤回一步。最簡單的模板 int x 4 int y 4 上下左右四個方向走。也可以八個方向,這裡我就不寫了。void dfs int fx,int...

UVA439深搜和寬搜區別

這題其實就是乙個變種的寬搜,很簡單,可是後來發現自己把寬搜和深搜給記反了,這題就一直寫的是深搜,但是顯然寬搜的題用深搜做事不對的,也學可以,反正本弱不會,但是前面幾個深搜的題目,我都是用寬搜 做的,事實證明深搜的題目是可以用寬搜來做的,而深搜和寬搜的最主要區別就是深蒐用棧來實現,而寬蒐用 佇列來實現...

廣搜與深搜演算法

bfs 廣度優先搜尋 從起點開始,檢視與其相鄰並且滿足題中條件的周圍的所有點 第一層點 然後再以他們為 起點 再去檢視與他們相鄰的第二層的點,一層一層的遍歷,直到找到目標。廣搜一般用於尋找最小路徑等型別題目,因為是層層尋找,所以尋找到的目標一定是最好的解,其大概過程如同一滴水滴到水池產生的水波。但是...