描述:简单的BFS,将位置和步数代入进一个结构体中(方便),queue,老套的visited数组。
#include<iostream>
#include<queue>
#include<cstring>
#define maxn 100010
using namespace std;
int visited[maxn];
struct step{
int x;
int steps;
step(int xx,int ss):x(xx),steps(ss){}
};
queue<step> q;
int n,k;
int main(){
while(cin>>n>>k){
memset(visited,0,sizeof(visited));
q.push(step(n,0));
visited[n]=1;
while(!q.empty()){
step curs=q.front();
if(curs.x==k){
cout<<curs.steps<<endl;
}
if(curs.x-1>=0&&!visited[curs.x-1]){
q.push(step(curs.x-1,curs.steps+1));
visited[curs.x-1]=1;}
if(curs.x+1<=maxn&&!visited[curs.x+1]){
q.push(step(curs.x+1,curs.steps+1));
visited[curs.x+1]=1;}
if(curs.x*2<=maxn&&!visited[curs.x*2]){
q.push(step(curs.x*2,curs.steps+1));
visited[curs.x*2]=1;}
q.pop();
}
return 0;
}
}
另:BFS模板
#include<stdio.h>
#include<string.h>
#define MAX 6
int matrix[MAX][MAX];
void BFS(){
int queue[6]={0};
int visited[MAX]={0};
int head=0;
int tail=0;
//出队把head往上移一格
//插入一个tail往上移一格
queue[tail++]=start;//入队
visited[start]=1;
while(head!=tail){
//出队
int v=queue[head++];
printf("%d\n",v+1);
for(int i=0;i<MAX;i++){
if(matrix[v][i]==1){
if(visited[i]==0){
//入队
queue[tail++]=i;
visited[i]=1;
}
}
}
}
}
int main(){
freopen("data.txt","r",stdin);
for(int i=0;i<MAX;i++){
for(int j=0;j<MAX;j++){
scanf("%d",&matrix[i][j]);
}
}
BFS(0);
return 0;
}