从队列操作到BFS

先把如下代码熟悉,再学习BFS的框架

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxN=100;
 4 int que[maxN];//定义数组模拟队列 
 5 int f, r;//队首队尾信息 
 6 int n;//输入数据数量 
 7 
 8 int main()
 9 {
10     f=r=1;//初始化,队列为空
11     cin>>n;
12     //cin>>que[r];//输入第一个数 
13     //n=n-1;//剩下需要输入n-1个数 
14     while(n--){
15         cin>>que[r++];//不断队尾插入数据 
16     }
17     while(f<=r){//判断队列是否为空 
18         int fn=que[f];//获取队首信息 
19         cout<<fn<<endl;//队首信息操作 
20         f++;//出队 
21     }
22     return 0;
23  } 

思考上述代码为什么会出现多输出一个0 ?如何修改?

BFS框架,注意与上述代码进行对比

 1 void bfs()
 2 {
 3     f=r=1;//队列初始化为空 
 4     que[r]=初始状态 //队尾插入初始状态 
 5     while(f<=r){
 6         //当队列非空时做,其中f和r分别表示队列的头指针和尾指针 
 7         if(找到目标状态)
 8             做相应处理(如退出循环输出解、输出当前解、比较解的优劣)
 9         else{
10             获取头结点信息; 
11             拓展头结点; 
12             if(拓展出当新结点没有出现过){
13                 r++;
14                 将新结点插到队尾; 
15             } 
16         } 
17         f++;//取下一结点 
18     }
19 }
原文地址:https://www.cnblogs.com/tflsnoi/p/13767816.html