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