先把如下代码熟悉,再学习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 }