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