2017 02 25 演算法02(廣搜)

2021-07-27 11:12:47 字數 1001 閱讀 3214

題目見上篇

#includestruct note;

int main(), book[51][51]=;

int next[4][2]=,,,};

int head,tail;

int i,j,k,n,m,startx,starty,p,q,tx,ty,flag;

scanf("%d %d",&n,&m);

for(i=1;i<=n;i++)

for(j=1;j<=m;j++)

scanf("%d",&a[i][j]);

scanf("%d %d %d %d",&startx,&starty,&p,&q);

head=1;

tail=1;

//往佇列插入迷宮入口座標

que[tail].x=startx;

que[tail].y=starty;

que[tail].f=0;

que[tail].s=0;

tail++;

book[startx][starty]=1;

flag=0;//用來標記是否達到目標點,0表示暫時還沒達到,1表示到達

//當佇列不為空時迴圈

while(headn || ty<1 || ty>m)

continue;

//判斷是否是障礙物或者已經在路徑中

if(a[tx][ty]==0 && book[tx][ty]==0)

//如果到目標點了,停止擴充套件,任務結束,退出迴圈

if(tx==p && ty==q)

} if(flag==1)

break;

head++;//當乙個擴充套件點結束後,head++才能對後面的點再進行擴充套件

} //列印佇列中末尾最後乙個點的步數

//注意tail是指向佇列列尾的下乙個位置,所以需要-1

printf("%d",que[tail-1].s);

return 0;

}

BFS廣搜演算法

之前學習資料結構的時候一直不會bfs 只是簡單的知道如何遍歷,不算熟練 現在終於會了。下面詳細講一下bfs。廣搜,即廣度優先搜尋。不像深搜那樣有回溯的過程。大致思想用乙個圖來表示 從頂點v1開始遍歷,訪問過,就將v1入隊。接著,訪問v2以及v3 v2和v3沒有必須的順序之分,可以自己定義先後順序 再...

C 演算法 廣搜

有乙個同學推薦我寫一下廣搜,廣搜在最短路 騙分 上確實也有突出貢獻,普及組應該也會考到,我今天就給要考普及組的同學講講課,今天講廣搜。廣搜,把可以走到的地點存進佇列,然後乙個個走,所以他第一次走到乙個點時的步數,一定是開始位置和這個點的最短步數,因為他會把所有路徑都加進去,所以第一次碰到的一定是最短...

廣搜與深搜演算法

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