【搜尋】【廣搜模板】
阿新 • • 發佈:2019-01-30
C++queue的應用
struct note{
int x; //橫座標
int step; //步數
int y; //縱座標
};
void BFS(note front_head)//BFS
{
queue<note>Q;//建立空佇列
Q.push(front_head);//將起始點加入佇列
note next_queue;//下一個佇列元素
note now_head;//當前隊頭元素
while(!Q.empty())//迴圈條件是佇列不為空
{
now_head = Q.front();//找到當前隊頭元素
Q.pop();//已經找到則出隊
for(i = 0; i < 8; i ++)//搜尋8個方向
{
next_queue.x = now_head.x + NEXT[i][0];
next_queue.y = now_head.y + NEXT[i][1];
if(next_queue.x < 0||next_queue.y <0||next_queue.x > 7||next_queue.y > 7)
continue ;
if(book[next_queue.x ][next_queue.y ]!= 1)//沒有走過該點
{
book[next_queue.x ][next_queue.y ] = 1;
next_queue.step = now_queue.step+1;
Q.push(next_queue);//將找到滿足條件的下一個佇列元素加入隊尾
//如果下一個佇列元素滿足終止條件,結束函式
if (next_queue.x == end_i&&next_queue.y == end_j)
{
step = next_queue.step;
return;
}
}
}
}
return;
}